小编典典

delete_all vs destroy_all?

all

我正在寻找从表中删除记录的最佳方法。例如,我有一个用户,其用户 ID 跨越许多表。我想删除该用户以及所有表中具有其 ID 的每条记录。

u = User.find_by_name('JohnBoy')
u.usage_indexes.destroy_all
u.sources.destroy_all
u.user_stats.destroy_all
u.delete

这有效并从所有表中删除了用户的所有引用,但我听说这destroy_all非常繁重,所以我尝试了delete_all.
它只会从他自己的用户表中删除用户,并且id所有其他表中的 都设为空,但其中的记录保持不变。有人可以分享执行此类任务的正确流程吗?

我看到它destroy_all调用了destroy所有关联对象的函数,但我只想确认正确的方法。


阅读 69

收藏
2022-06-25

共1个答案

小编典典

你说的对。如果您想删除用户和所有关联对象 ->destroy_all 但是,如果您只想删除用户而不抑制所有关联对象 ->delete_all

根据这篇文章:Rails :dependent => :destroy VS :dependent =>
:delete_all

  • destroy/ destroy_all:通过调用其destroy方法,关联对象与该对象一起被销毁
  • delete/ delete_all: 所有关联的对象都被立即销毁而不调用它们的 :destroy 方法
2022-06-25