ruby-on-rails - 批量销毁 Rails 事件记录中的所有内容

原文 标签 ruby-on-rails activerecord

我有大量的 Product 对象,它们都有一个关联的“变体”。我不能只是delete_all产品,因为我也需要删除关联。

当我使用 Products.all.destroy_all它卡住并且没有完成销毁所有产品,然后它迫使我取消它并回滚它。

这个问题有方法解决吗?

最佳答案

对于大量对象及其关联的“变体”,您必须使用 destroy_all。

Product.all.destroy_all

由于 destroy_all 实际上加载了整个关系,然后一个一个地迭代销毁记录,你可以很容易地破坏你的内存垫圈。所以让我们在默认情况下做正确的事情,默认情况下以 100 的批次进行这项工作,并允许您像这样指定批次大小:destroy_all(batch_size: 100).
Product.destroy_all(batch_size: 100)

或者

您可以使用 in_batches
Product.in_batches(of: 200).destroy_all

关于ruby-on-rails - 批量销毁 Rails 事件记录中的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48655004/

相关文章:

ruby-on-rails - 从模型访问 current_user 的最优雅方式是什么?或者为什么这是一个坏主意?

php - 使用Codeigniter从不同的表中获取值到单个数组中?

activerecord - 如何将 activerecord 结果转换为包含根的哈希数组

ruby-on-rails - 跨两个 ActiveRecord 行镜像值的最佳方法是什么?

ruby-on-rails - 具有自定义根名称的 activemodel 序列化程序 has_one

ruby-on-rails - 在 Docker 容器上进行远程调试时,无法使用 Visual Studio 代码中断任何断点

ruby-on-rails - 使用 simple_form 更改默认错误消息

ruby-on-rails - Ruby 不读取 database.yml 文件

ruby-on-rails - 如果属性为 nil,则 ActiveRecord 默认值

ruby-on-rails-3 - 如何获取rails 3中所有数据库行的范围?