在rails中调用update_all中的self对象

时间:2016-05-16 10:27:35

标签: ruby-on-rails ruby-on-rails-4 activerecord

我有一种情况,我有一个产品表,它有一个JSON字段,我必须调用一个方法来更新它。所以有两种方法

 Product.all.each do |pr|
   pr.update_column(:boolean_tree, pr.change_boolean_tree)
 end 

除了表现之外,没有任何问题。为了提高性能,我们可以运行原始SQL 。哪个肯定能正常工作,但不能用铁路。

我在想这种情况是否可以使用 update_all 。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

据我所知,除非您尝试使用相同的内容更新所有记录,否则您将无法使用update_all。当数据库中有很多产品时,指令Product.all会在开始更新之前将所有记录加载到内存中。

我建议使用Activerecord中的find_in_batches方法(see doc)批量加载产品。