2

据我所知,update_only 不适用于 has_many 关联。

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

我知道:allow_destroy。但是,我没有孩子的身份来让 rails 知道应该销毁什么。

PS 我最初在 2012 年问过这个问题,然后我找到了一个 hacky 解决方案来覆盖 assign_nested_attributes_for_collection_association。我想知道 Rails 中是否引入了任何东西来解决这个问题。它看起来像非常常见的简单案例。我想知道为什么有一个内置的解决方案。

4

2 回答 2

1

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

这样的代码可以被推广并移动到一个模块中以供进一步重用。

于 2012-07-17T18:51:30.803 回答
0

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

解决方案是

def foo_attributes=(*attrs)
  self.foo.clear
  super(*attrs)
end
于 2016-01-04T20:57:10.893 回答