2012-08-29 26 views
0

我正在使用previous_changes方法來確定對我的ActiveRecord模型的更改以通過JSON傳回,並且想知道是否有類似的東西告訴我嵌套屬性已被銷燬。ActiveRecord是否有報告嵌套屬性模型已被銷燬的方法?

例如如果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定義的父模型的實例變量中。

回答

1

廣告的:after_destroy followup_tasks回調到細節模型(兒童)

def followup_tasks 
    #do other stuff 
end 
+0

是啊,我想我必須做這樣的事情。現在我已經嘗試過了,但是我無法看到如何從此回調中將某些內容傳遞給父模型。我已經嘗試在父模型上設置一個實例變量,但在子控件被刪除後,它不會出現在控制器中的模型實例中。 Hmmmmm。 – brad

+0

我已經問過關於此問題的另一個問題http://stackoverflow.com/questions/12171216 – brad

相關問題