has_many + accepts_nested_attributes_for +:update_only =>真正

时间:2012-06-26 14:33:10

标签: ruby-on-rails associations

据我所知,update_only对has_many关联不起作用。

我正在更新嵌套属性,每次都会创建新的子项,并且不会删除旧的子项。在每次更新时自动删除它们的好方法是什么(模仿:适用于has_one的update_only行为)?

我知道:allow_destroy。但是,我没有儿童身份证让铁路知道应该销毁什么。

P.S。我最初在2012年问过这个问题然后我发现了一个覆盖assign_nested_attributes_for_collection_association的hacky解决方案。我想知道是否有任何东西在Rails中引入来解决这个问题。它看起来很常见的直截了当的情况。我想知道为什么有一个内置的解决方案。

2 个答案:

答案 0 :(得分:1)

我发现最好的方法是覆盖对象上的方法assign_nested_attributes_for_collection_association,检查那里的关联类型。如果它是has_many然后在这个关联上做destroy_all。

此类代码可以通用化并移动到模块中以供进一步重用。

答案 1 :(得分:0)

在这两个问题中提到的城镇似乎有一个更好的解决方案:

解决方案是

def foo_attributes=(*attrs)
  self.foo.clear
  super(*attrs)
end