アソシエーションとは
Ruby on RailsのActive Recordでテーブル間(モデル)の関連付けを行うこと
メソッドの種類
belongs_to...(「1対1」のつながりを設定する)
has_one...(「1対1」のつながりを設定する。belongs_toとの違いは、他方のモデルのインスタンスをまるごと含んでいること)
has_many...(「1対多」のつながりを設定する場合によく使われる。)
has_many :through...(「多対多」のつながりを設定する場合によく使われる。この関連付けは、2つのモデルの間に「第3のモデル」(結合モデル)が介在する点が特徴)
has_one :through...(他方のモデルに対して「1対1」のつながりを設定。この関連付けは、2つのモデルの間に「第3のモデル」(結合モデル)が介在する点が特徴)
has_and_belongs_to_man...(他方のモデルと「多対多」のつながりを作成する。through:を指定した場合と異なり、第3のモデル(結合モデル)が介在しない)
ex.)twitterのような投稿アプリの時

User一人に対してPostsにはUserが投稿した複数の情報が入っている。
UserとPostsを連携させるために使うメソッドがbelongs_toメソッドとhas_manyメソッドだ。
英文で書くと、、、
user has many posts (userはpostsを所有する)
posts belongs to user (postsはuserに属する)
なのでUserモデルには
has_many :posts, dependent: :destroy
Postsモデルには
belongs_to :user
を記入し連携させる
dependentオプションとは
モデルの親レコードを削除するときに子のレコードを削除するかどうかを決めるオプション。
種類
オプション 説明
:destroy 親レコードと一緒に子レコードを削除。子レコードのコールバックも実行
:delete_all 親レコードと一緒に子レコードを削除。SQL直接実行なのでコールバックなし
:nullify 子レコードの外部キーをNULL更新する
:restrict_with_exception 子レコードがある場合はActiveRecord::DeleteRestrictionErrorを発生
:restrict_with_error 子レコードがある場合は削除が失敗し、親レコードにエラー情報を付与