加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 如何在Rails 3/4中批量运行更新?

发布时间:2020-12-12 06:56:14 所属栏目:MsSql教程 来源:网络整理
导读:我需要批量更新数千条记录,我想分批处理更新。首先,我试过: Foo.where(bar: 'bar').find_in_batches.update_all(bar: 'baz') …我希望生成SQL,如: "UPDATE foo SET bar = 'baz' where bar='bar' AND id (whatever id is passed in by find_in_batches)"
我需要批量更新数千条记录,我想分批处理更新。首先,我试过:
Foo.where(bar: 'bar').find_in_batches.update_all(bar: 'baz')

…我希望生成SQL,如:

"UPDATE foo SET bar = 'baz' where bar='bar' AND id > (whatever id is passed in by find_in_batches)"

这不起作用,因为find_in_batches返回一个数组,而update_all需要一个ActiveRecord关系。

这是我接下来尝试的:

Foo.where(bar: 'bar').select('id').find_in_batches do |foos|
  ids = foos.map(&:id)
  Foo.where(id: ids).update_all(bar: 'baz')
end

这有效,但它显然运行一个选择后跟更新,而不是基于我的’where’条件的单个更新。有没有办法清理它,以便选择和更新不必是单独的查询?

解决方法

在Rails 5中,有一个新的方便的方法ActiveRecord :: Relation #in_batches来解决这个问题:
Foo.in_batches.update_all(bar: 'baz')

检查documentation了解详情。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读