これは私の質問へのフォローアップです: ActiveModel での子の関連付けの更新
親に関連付けられた多数の子レコードを更新する標準/正しい方法を探しています。
親がいるとしましょう(has_manyで子テーブルに接続され、:autosave => true)。
obj = Parent.first
今、私はその子を繰り返し処理し、それらを更新します。
obj.each.do |child|
child.remark = "something"
end
obj.save を呼び出すときに、子を親と一緒に保存したいのですが、前の質問で説明したように、それを行う唯一の方法は、次のように直接更新することです。
obj.children.first.remark = "something"
(または各子を保存しますが、これには明示的なトランザクションが必要であり、ここでは使用しないでください)。
これを実装する正しい方法は何ですか?
ありがとう!
*編集:ここで与えられたアドバイスに従って、これをモデルに追加しました:
class Parent < ActiveRecord::Base
has_many :children, :inverse_of => :parent,:autosave=>true
accepts_nested_attributes_for :children
それでも、
x = Parent.first
c = x.children.first
c.remark = "something"
x.save # => doesn't update c