前提
Railsで簡易チャットアプリを作っていて、下記の通り3つのテーブルを作りました。
- Usersテーブル
id
,name
- Roomsテーブル
id
,user_id
,title
- Participantsテーブル
id
,room_id
,user_id
また、現状は下記のようなアソシエーションを組んでいます。
ruby
1# user.rb 2has_many :rooms
ruby
1# room.rb 2belongs_to :user
やりたいこと
room_id
が1のルームに参加している参加者の名前一覧を表示したい場合、
ruby
1# rooms/show.html.erb 2<% @participants.each do |participant| %> 3 <%= participant.user.name %> 4<% end %>
という記述で表示できるようにしたい。
試したこと
ruby
1# rooms_controller.rb 2def show 3 @participants = Participant.includes(:users).where(room_id: 1) 4end
こう書いてみましたが、Association named 'users' was not found on Participant; perhaps you misspelled it?
と出てしまいます。usersとparticipantsのアソシエーションをうまく書けば解決しそうな気もするのですが、この2つの関係性はどのように定義したらいいのか分かりません。(単純なhas_many
やbelongs_to
の関係じゃない気が...。)
つまるところ、下記のようなSQLが発行できればいいのだと思うのですが、それをRails的にどのように書いたらいいのでしょうか?
SELECT * FROM participants INNER JOIN users ON participants.user_id = users.id WHERE participants.room_id = 1
ご教示いただけますと幸いです。
または、私になにか認識の違いがありましたらご指摘ください。
よろしくお願い致します。
あなたの回答
tips
プレビュー