アソシエーションを設定したモデルに関する注意点(Ruby on Rails)
はじめに
Ruby on Railsのフォロワー機能作成のプラクティスをやっていて、これに何回か引っかかったのでその忘備録
アソシエーションを記述すると、子モデルに設定される制限について
belong_to
を記述した、子モデルから作成したインスタンスは「外部キーに親のidが入っていないとテーブルに登録できない」
外部キーに親のidが入っていない状態で、save
やcreate
でテーブルに登録しようとするとエラーになる。
外部キーに親のidが入っていない状態のインスタンスが作成されるとき
子モデル.new
で、新規作成したインスタンスは、「外部キーがnilになる」
(逆にアソシエーションメソッドを介して作成したインスタンスには外部キーが最初から入る。)
外部キーに値をセットするには
作成したインスタンスを親の配列に追加する。
例)
child = Children.new(name: "田中子供") parent = Parent.new(name: "田中親") parent.children << child #これで外部キーに値がセットされる