前提・実現したいこと
親、子、孫と3つの関連テーブルがあり、親と子は1:1、子と孫は1:nの状態です。
親をwhere句で検索した後、検索結果の親に関連する子と孫の値を更新したいです。
Ruby
1#親モデルのリレーション 2has_one :child, dependent: :destroy, inverse_of: :parent 3accepts_nested_attributes_for :child 4 5#子モデルのリレーション 6belongs_to :parent, inverse_of: :child 7accepts_nested_attributes_for :child_members 8 9#孫モデルのリレーション 10belongs_to :child, inverse_of: :child_members
Ruby
1#更新するコード※controllerに記述 2p = Parent.where(id: params[:id]) 3p.colA = 0 4p.child.colB = 10 5p.child.child_members.colC = 20 6p.save
※params[:id]は、Viewから渡されるidの配列で、ここに値が入っていて、SQLが実行されてデータが取れていることは確認しています
※colA,colB,colCは、それぞれのモデルにあるカラムで、更新時には画面から渡される値ではない値を入れたい
発生している問題・エラーメッセージ
NoMethodError: undefined method `child' for nil:NilClass
該当のソースコード
Ruby
1p.child.colB = 10
試したこと
・親モデルを検索するときにfindを使うと、p.child.colBは取れますが、p.child.child_membersはNoMethodErrorになります
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/12 09:41