ActiveRecordのネストされた属性のbefore_updateコールバックで新しい子を処理する方法

StackOverflow https://stackoverflow.com/questions/2021059

質問

私はモデルオブジェクトを持つ別のモデルオブジェクト(子)に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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top