我正在使用previous_changes
方法來確定對我的ActiveRecord模型的更改以通過JSON傳回,並且想知道是否有類似的東西告訴我嵌套屬性已被銷燬。ActiveRecord是否有報告嵌套屬性模型已被銷燬的方法?
例如如果Parent has_many Children
和Parent 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定義的父模型的實例變量中。
是啊,我想我必須做這樣的事情。現在我已經嘗試過了,但是我無法看到如何從此回調中將某些內容傳遞給父模型。我已經嘗試在父模型上設置一個實例變量,但在子控件被刪除後,它不會出現在控制器中的模型實例中。 Hmmmmm。 – brad
我已經問過關於此問題的另一個問題http://stackoverflow.com/questions/12171216 – brad