我正在使用previous_changes
方法来确定我的ActiveRecord模型的更改以通过JSON传回,我想知道是否有类似的东西告诉我嵌套属性已被破坏。
e.g。如果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定义的父模型的实例变量中。
答案 0 :(得分:1)
广告:after_destroy followup_tasks
回调详情模型(儿童)
def followup_tasks
#do other stuff
end