据我所知,update_only对has_many关联不起作用。
我正在更新嵌套属性,每次都会创建新的子项,并且不会删除旧的子项。在每次更新时自动删除它们的好方法是什么(模仿:适用于has_one的update_only行为)?
我知道:allow_destroy。但是,我没有儿童身份证让铁路知道应该销毁什么。
P.S。我最初在2012年问过这个问题然后我发现了一个覆盖assign_nested_attributes_for_collection_association的hacky解决方案。我想知道是否有任何东西在Rails中引入来解决这个问题。它看起来很常见的直截了当的情况。我想知道为什么有一个内置的解决方案。
答案 0 :(得分:1)
我发现最好的方法是覆盖对象上的方法assign_nested_attributes_for_collection_association,检查那里的关联类型。如果它是has_many然后在这个关联上做destroy_all。
此类代码可以通用化并移动到模块中以供进一步重用。
答案 1 :(得分:0)
在这两个问题中提到的城镇似乎有一个更好的解决方案:
解决方案是
def foo_attributes=(*attrs)
self.foo.clear
super(*attrs)
end