【发布时间】:2016-09-22 16:46:53
【问题描述】:
根据 Rails 文档 here 和 here,使用 update_all 不会执行以下操作 -
- 它会跳过验证
- 它不会更新
updated_at字段 - 它会默默地忽略
:limit和:order方法
我正在尝试检查我的代码库并删除 update_all 的实例,尤其是因为第一点。
有没有办法仍然拥有update_all 的便利性并仍然运行验证?我知道我可以遍历每条记录并保存它,但这不仅在视觉上更混乱而且效率更低,因为它执行 N 条 SQL 语句而不是 1 条
# before
User.where(status: "active").update_all(status: "inactive")
# after
User.where(status: "active").each { |u| u.update(status: "inactive") }
谢谢!
编辑:我使用的是 Rails 4.2
【问题讨论】:
-
你可能想看看batches
标签: ruby-on-rails validation activerecord