🙆

アソシエーション

に公開

はじめに

学び始めて何度苦しめられたかわからないアソシエーションについてまとめていきます。

1:Nの関係

1:Nの関係は1:多という時もあります。

has_many :posts, dependent: :destroy

userとpostはユーザーが何個も投稿できるという点でuserが1、postが多になります。
dependent: :destroyは投稿したユーザーが退会したらその投稿も全部なくなるよという意味になります。

postの方は以下の記述になります。

belongs_to :user

使用する時

post.user.nameを例に説明していきます。
これを記述すると投稿したユーザーの名前がわかります。

これはpostがユーザーのuser_idという外部キーを所持しているため可能になります。
外部キーを所持していると関連するuserの情報を参照できるようになります。

外部キーがないと、、、

投稿した人が誰なのか参照することが不可能になります。
必ず存在しなければならないという系統のエラー(〜must exist)が発生する可能性があり、実際以下のエラーが発生しました.

Book must exist

これは以前作成したbookers2というアプリを参考にした際、アソシエーションの名前もそのままにしていたのが原因でした。

まとめ

railsのアソシエーションは作成するアプリが複雑になればなるほど重要になってきます。
今後さらに難易度の高い技術も存在するため、ここで立ち返ってみるのもありかなと。
参考になれば幸いです。

Discussion