根据documentation Rails has_many
关联有 clear
方法。看起来它在执行后立即执行 sql delete
查询。是否有一种规范的方法可以删除所有子对象并仅在 save
方法时更新关联?例如:
@cart.container_items.delete_all_example # looks like `clear` execute sql at this line
if @cart.save
# do smth
else
#do smth
end
这是必要的,因为父对象的许多更改必须全部提交或全部不提交。
最佳答案
你不想delete_all
,你想destroy_all
。
调用 delete_all
执行一个简单的 SQL delete
,忽略任何回调和相关记录。
使用 destroy_all
调用每个对象的 destroy
方法,允许 :dependent => :destroy
按预期工作,清理子记录.
这不会在保存
时销毁所有对象,并且没有规范的方法可以做到这一点,因为您没有保存 记录。 Rails 在方法调用时持续销毁,而不是在稍后的 save
中。如果你需要很多销毁是事务性的,将它们包装在一个事务中:
Cart.begin do
@cart.container_items.delete_all_example
end
关于sql - Rails has_many 清除方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11309555/