aoのプログラミングブログ

あおのエンジニア学習日記

初心者のプログラミング学習記録。

Rails モデルの関連付け"has_many"とは

f:id:ao_pro_21:20220125114026p:plain

has_many ってなに?

  • 他のモデルとの間に、「1対多」の繋がりがあることを示す。

※反対側のモデルにはbelongs_toが使われることが多い。

規則

  • has_many関連付けを宣言する場合、相手のモデル名は複数形にする。

ユーザーがそれぞれメッセージを投稿できるアプリがあるとする。 モデルクラスは、UserモデルとPostモデル。

  • Userモデルに
has_many :post
  • Postモデルに
belongs_to :user

と入れることで、1対多の関連付けができる。 つまり、

User : 多数のpostを持つ。

Post :1つの user_id を持つ。

ということです。

補足

ん?user_id? Userのインスタンスなら、user.id では? と思いますね。

外部キー(関連付けた相手のクラスのインスタンスを参照するキー)の場合は、user_id のように、アンダーバーを使用するとRailsが勝手に判断してくれます!

オプション

has_manyに追加できるオプション

:as
:autosave
:class_name
:counter_cache
:dependent
:foreign_key
:inverse_of
:primary_key
:source
:source_type
:through
:validate

まとめ

突然「1対多」という聞き慣れぬ言葉を聞くと構えてしまいますが、

UserとPostの例で考えれば簡単でした。

参考資料