カテゴリー
サインイン 新規登録

間違いや改善の指摘

内容の技術的な誤り・誤字脱字やミスのご報告・解説やトピックの追記/改善のご要望は教材をさらに良くしていく上でとても貴重なご意見になります。

少しでも気になった点があれば、ご遠慮なく投稿いただけると幸いです🙏

実際には誤りではなく勘違いであっても、ご報告いただけることで教材のブラッシュアップにつながります。

質問ポリシー①

教材受講者みなさんのスムーズな問題解決のために、心がけていただきたいことがあります。

教材の内容に関する質問を投稿しましょう

教材の内容に関係のない質問や教材とは異なる環境・バージョンで進めている場合のエラーなど、教材に関係しない質問は推奨していないため回答できない場合がございます。

その場合、teratailなどの外部サイトを利用して質問することをおすすめします。教材の誤字脱字や追記・改善の要望は「文章の間違いや改善点の指摘」からお願いします。

12-3

アソシエーションの実装

モデルを作成したらアソシエーションの設定を行います。

アソシエーションとはモデル間の関連付けのことです。

まず、chat_messagesテーブルを確認しましょう。

カラム名 データ型
content text
user_id references
chat_room_id references

テーブルにuser_idchat_room_idがあるので、UserモデルとChatRoomモデルとのアソシエーションを考えます。

UserモデルとChatMessageモデルの関係

UserモデルとChatMessageモデルには、以下のような関係性があります。

Copied!
- ユーザーは複数のメッセージを送ることができる - メッセージAを送信したユーザーは1人しかいない

このような関係を「1対多」といいます。

image

では、app/models/user.rbに以下のコードを追加します。

app/models/user.rb
123456789101112
Copied!
class User < ApplicationRecord has_many :reactions has_many :chat_room_users has_many :chat_rooms, through: :chat_room_users has_many :chat_messages # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable # 中略

has_manyは、他のモデルとの間に「1対多」のつながりがあることを示します。(「1側」にhas_manyを記載します)

「多」のモデルの方には、belongs_toが使われます。

参考: Active Record の関連付け

次に、app/models/chat_message.rbに以下のコードを追加します。

app/models/chat_message.rb
1234
Copied!
class ChatMessage < ApplicationRecord # この行を追加 belongs_to :user end

ChatRoomモデルとChatMessageモデルの関係

ChatRoomモデルとChatMessageモデルには、以下のような関係性があります。

Copied!
- 1つのチャットルームには複数のメッセージを持つことができる - メッセージAは、1つのチャットルームに属する

このような関係を「1対多」といいます。

image

では、app/models/chat_room.rbに以下のコードを追加してください。

app/models/chat_room.rb
123456
Copied!
class ChatRoom < ApplicationRecord has_many :chat_room_users # ここに追加 has_many :chat_messages has_many :users, through: :chat_room_users end

次に、app/models/chat_message.rbに以下のコードを追加します。

app/models/chat_message.rb
12345
Copied!
class ChatMessage < ApplicationRecord belongs_to :user # この行を追加 belongs_to :chat_room end

以上でアソシエーションの設定は終了です。

お疲れさまでした。