在Rails中的一个ActiveRecord事务中更新多个记录

Avi*_*hai 6 ruby postgresql activerecord transactions ruby-on-rails

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

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

MyModel.transaction do
    things_to_update.each do |thing|
        thing.score = rand(100) + rand(100)
        thing.save
    end
end
Run Code Online (Sandbox Code Playgroud)

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

我怎么能做到这一点?

mik*_*kej 1

我不确定,但可能您将多个事务多个查询混淆了。

您发布的代码将创建一个事务(例如,如果发生异常,则所有更新都将回滚),但每个事务save都会导致单独的更新查询。

如果可以使用 SQL 而不是 Ruby 代码执行更新,那么这可能是最好的方法。