gpt4 book ai didi

sql - Rails has_many 清除方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:45 25 4
gpt4 key购买 nike

根据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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com