0

このメソッドを使用previous_changesして ActiveRecord モデルへの変更を決定し、JSON 経由で返すようにしていますが、ネストされた属性が破棄されたことを伝えるようなものがあるかどうか疑問に思っています。

たとえば、次のことができるようにParent has_many ChildrenParent accepts_nested_attributes_for :children, allow_destroy: trueたい場合。

> p = Parent.last
> p.children.length
=> 3
> p.update_attributes {"name"=>"Daddy","children_attributes"=>{"0"=>{"__destroy"=>"1","id"=>"12"}}}
=> true
>p.previous_changes
=> {"name"=>["", "Daddy"], "updated_at"=>[Mon, 27 Aug 2012 22:34:34 EST +10:00, Wed, 29 Aug 2012 10:13:33 EST +10:00]}
>p.destroyed_attributes #Not a real method!!!
=> {"children_attributes"=>{"0"=>{"id"=>"12"}}}

私が欲しいのは最後のコマンドです。この情報を取得するための独自のソリューションを作成することはできますが、Rails に隠れて、既にこれを実行してくれるものがあることを願っています。

編集:

これを行う方法が組み込まれているようには見えませんが、解決策を思いつきました。私の親モデルでは、before_save および after_save コールバックを定義しました。before_save で、すべての子 ID の配列を保存しました。after_save で、すべての子 ID の配列を減算しました。配列に残っている ID はすべて削除されました! attr_accessor で定義された親モデルのインスタンス変数に配列を格納しました。

4

1 に答える 1

1

:after_destroy followup_tasks詳細モデル (子) へのコールバックを追加します。

def followup_tasks
  #do other stuff
end
于 2012-08-29T00:40:08.053 に答える