ActiveRecord是否有报告嵌套属性模型已被销毁的方法?

时间:2012-08-29 00:20:03

标签: ruby-on-rails nested-attributes

我正在使用previous_changes方法来确定我的ActiveRecord模型的更改以通过JSON传回,我想知道是否有类似的东西告诉我嵌套属性已被破坏。

e.g。如果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 个答案:

答案 0 :(得分:1)

广告:after_destroy followup_tasks回调详情模型(儿童)

def followup_tasks
  #do other stuff
end