gpt4 book ai didi

ruby-on-rails - 在 Rails 的一个 ActiveRecord 事务中更新多条记录

转载 作者:数据小太阳 更新时间:2023-10-29 07:07:31 37 4
gpt4 key购买 nike

如何使用 Rails 中的事务 block 一次性更新/保存模型的多个实例?

我想更新数百条记录的值;每条记录的值都不同。这不是一个属性的批量更新情况。 Model.update_all(attr: value) 在这里不合适。

MyModel.transaction do
things_to_update.each do |thing|
thing.score = rand(100) + rand(100)
thing.save
end
end

save 似乎发布了它自己的事务,而不是将更新分批处理到周围的事务中。我希望所有更新都在一次大交易中进行。

我怎样才能做到这一点?

最佳答案

假设您知道要将 ID 为 1、2 和 3 的事物设置为分数、2、8 和 64(而不是随机数),您可以:

UPDATE 
things AS t
SET
score = c.score
FROM
(values
(1, 2),
(2, 30),
(4, 50)
) as c(id, score)
where c.id = t.id;

因此,对于 Rails,您将使用 ActiveRecord::Base.connection#execute 来执行与上述类似的 block ,但会插入正确的值字符串。

关于ruby-on-rails - 在 Rails 的一个 ActiveRecord 事务中更新多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967702/

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