質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

3156閲覧

[レビュー機能を開発してます]モデル結合がうまくいかず'ActiveRecord::ConfigurationError~'のエラーが出る

onigiri_beef

総合スコア6

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/01/24 05:22

前提・実現したいこと

ECサイトを作成しており、レビュー機能を開発したいです。ある商品に対してレビューをしたユーザーを全て取得するロジックを作成したいのですが、うまくいかず詰まっています。
ユーザーはレビュー用のニックネームを持っており、レビューテーブルにはフォームの内容を保存出来るようになっております。
レビュー作成の動作確認は完了しているので、レコードは作成されております。
やりたいこととしてはviewにて

ニックネーム  星評価
レビュータイトル
本文

のような形でそのアイテムに書かれたレビューを全て表示するようなものを想定しております。

ご教授いただけますと幸いです。

発生している問題・エラーメッセージ

ActiveRecord::ConfigurationError: Can't join 'User' to association named 'review'; perhaps you misspelled it?

該当のソースコード

User

1 has_many :reviews

Item

1 has_many :reviews, dependent: :destroy

Review

1 belongs_to :user 2 belongs_to :item

controller

1 @users = User.joins(:review)

schema

1create_table "reviews", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t| 2 t.string "title" 3 t.text "body" 4 t.integer "rate", null: false 5 t.integer "user_id", null: false 6 t.integer "item_id", null: false

試したこと

Item.joins(:review)でも同じエラーになります。

補足情報(FW/ツールのバージョンなど)

ruby 2.6.4p104
データベースマイグレーション: ridgepole

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

has_many :reviews(複数形) なので @users = User.joins(:reviews)の方も複数形で。

ただ、やりたいのはUserの書いたreviewの一覧ではなく、Itemに書かれたreviewなので、
0. あるItemについてのreviewを見るなら
@reviews = @item.reviews
0. Itemの一覧とそれにぶら下がるreviewを見るなら
@items = Item.includes(:reviews) (joinsではなく)としておいて、
@items.each do |item| reviews = item.reviews と。

投稿2020/01/24 07:42

winterboum

総合スコア23347

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

onigiri_beef

2020/01/24 11:40 編集

素早い回答ありがとうございます!レビュー投稿するときにレビュー用のニックネームをユーザーテーブルのnicknameカラムに保存するような仕様にしておりまして、viewではItemに書かれたreviewをみたいのですが、そのレビューのnicknameの取得にてこずっておりまして。。。 @reviews.each do |review| review.title review.body review.rate などでレビュー情報は取れているのですが、そのレビューを書いたユーザーのニックネームを取得する方法がありましたら教えていただきたいです。よろしくお願いいたします
winterboum

2020/01/24 12:12

review.user.nickname では取れない?
onigiri_beef

2020/01/25 01:27

取れました。。。ありがとうございます! いまいちなんでこれで取れてるのか理解できていないのですが、どのあたりを勉強すれば理解できますでしょうか、、? 勉強不足で申し訳ありませんがご回答いただけますと幸いです。
winterboum

2020/01/25 06:52

review.user.nickname は method chain といわれてまして、object指向言語では極一般的なものですので、その辺りを読めばよいかと。 review のmethod の user を呼び そのの戻り値が Userのobjectなので、 そのmethod の nickname を呼ぶ その戻り値が Stringのobjectなので、Stringのmethodを呼ぶ、、、 といった具合。 method chainはobject指向のものなので、rubyの世界 userがreviewのmethodなのはRailsのしわざなので、この辺りはRailsの「関連」とかhas_one,has_many,belongs_to 辺りにかいてあるかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問