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

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

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

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

SQL

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

Q&A

0回答

248閲覧

【Rails】アソシエーションの組み方(発行したいSQL有)

ta539tg70

総合スコア20

Ruby on Rails 5

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

SQL

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

0グッド

0クリップ

投稿2019/01/20 02:44

前提

Railsで簡易チャットアプリを作っていて、下記の通り3つのテーブルを作りました。

  1. Usersテーブル id, name
  2. Roomsテーブル id, user_id, title
  3. 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_manybelongs_toの関係じゃない気が...。)

つまるところ、下記のようなSQLが発行できればいいのだと思うのですが、それをRails的にどのように書いたらいいのでしょうか?
SELECT * FROM participants INNER JOIN users ON participants.user_id = users.id WHERE participants.room_id = 1

ご教示いただけますと幸いです。
または、私になにか認識の違いがありましたらご指摘ください。
よろしくお願い致します。

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

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

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

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

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

matsuand

2019/01/21 00:53

rails の実装を考える以前として、ルームに対しては(ユーザーとの間ではなく)参加者との間で、belongs_to、has_many の関係があるのではないですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問