gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:51:37 26 4
gpt4 key购买 nike

我需要批量更新数千条记录,我想批量处理更新。首先,我试过:

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

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

最佳答案

在 Rails 5 中,有一个新的方便的方法 ActiveRecord::Relation#in_batches解决这个问题:

Foo.in_batches.update_all(bar: 'baz')

查询 documentation详情。

关于sql - 如何在 Rails 3/4 中批量运行更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23252811/

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