Rails モデルの関連付け"has_many"とは
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の例で考えれば簡単でした。