ActiveRecordのネストされた属性のbefore_updateコールバックで新しい子を処理する方法
-
19-09-2019 - |
質問
私はモデルオブジェクトを持つ別のモデルオブジェクト(子)にhas_manyの関連で(のは、親としましょう)。
class Parent < ActiveRecord::Base
has_many :children
accepts_nested_attributes_for :children
end
class Child < ActiveRecord::Base
belongs_to :parent
end
親で、私はその子に基づいて計算された属性を設定するbefore_updateコールバックにコードを追加します。
私はに実行してきた問題は、私は方法Parent.update使用する場合(IDを、ATTS)、新しい子供たちのためにATTSを追加し、ATTSコレクションに追加ものはbefore_update時に利用できないということである(返しself.children古いコレクション)。
accepts_nested_attributes_forいじりせずに新しいものを取得する方法はありますか?
解決
あなたがRailsの2.3.2で私のために作品を説明し何。私はあなたが適切に親の子に割り当てることがないかもしれないと思います。子どもたちは、更新後に更新されていますか?
あなたの質問に使用されるように、accepts_nested_attributes_for、親のchild_attributesライターが作成されます。子供のとは対照的に、::children_attributes私はあなたが更新しようとしている感があります。
これが説明するように、あなたのモデルを使用して動作し、この次before_updateコールバックます:
before_update :list_childrens_names
def list_childrens_names
children.each{|child| puts child.name}
end
コンソールでこれらのコマンドます:
Parent.create # => Parent(id => 1)
Parent.update(1, :childrens_attributes =>
[{:name => "Jimmy"}, {:name => "Julie"}])
この出力を生成します:
Jimmy
Julie
所属していません StackOverflow