gpt4 book ai didi

ruby-on-rails - User.destroy_all 或 User.delete_all 做什么?

转载 作者:行者123 更新时间:2023-12-03 16:01:28 25 4
gpt4 key购买 nike

我正在开发一个具有以下 cucumber 步骤的项目:

Given /^no registered users$/ do
User.delete_all
end

作为一个新的 RoR 用户,这看起来有点危险,即使我会在我们的开发数据库上进行测试,因为我们的 User表有实际数据。这行代码在做什么?

谢谢!

最佳答案

delete_all 来自 activerecord 库而不是来自 FactoryGirl。

这两者之间的区别是:

delete_all(条件 = nil) 上市

  • 在不先实例化记录的情况下删除匹配条件的记录,因此不调用destroy方法也不调用回调。
  • 这是一条直接进入数据库的 SQL DELETE 语句,比 destroy_all 高效得多。
  • 但是要小心关系,特别是:不遵守在关联上定义的依赖规则。
  • 返回受影响的行数。

  • destroy_all(条件 = nil) 上市
  • 通过实例化每条记录并调用其destroy方法来销毁匹配条件的记录。
  • 执行每个对象的回调(包括:依赖关联选项和 before_destroy/after_destroy Observer 方法)。
  • 返回被销毁的对象的集合;每个都将被卡住,以反射(reflect)不应进行任何更改(因为它们无法持久化)。

  • 备注

    当您一次删除许多记录时,每条记录的实例化、回调执行和删除可能会很耗时。它为每条记录生成至少一个 SQL DELETE 查询。如果您想快速删除许多行,而不关心它们的关联或回调,请改用 delete_all。

    关于ruby-on-rails - User.destroy_all 或 User.delete_all 做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10594028/

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