质量增量字段为1

时间:2011-02-11 09:03:09

标签: ruby-on-rails

我有一个查询update deals set count = count + 1。在Rails中,当我使用ActiveRecord执行此操作时,我可以想到

Deal.all.each { |deal| deal.update_attribute(:count => (deal.count + 1))}

这需要更多的SQL查询而不是一个查询。有没有更好的方法在Rails中执行此操作(不直接在Rails应用程序中使用SQL查询)。

2 个答案:

答案 0 :(得分:18)

Deal.update_all("count = count + 1")

输出

UPDATE "deals" SET count = count + 1

并且有条件:

Deal.where(order_id: 2).update_all("count = count + 1")

输出

UPDATE "deals" SET count = count + 1 WHERE "deals"."order_id" = 2

答案 1 :(得分:9)

使用ActiveRelation update_all如果所有记录与提供的一组条件匹配,则更新所有记录,还可以提供限制和订单。此方法构造单个SQL UPDATE语句并将其直接发送到数据库。它不会实例化所涉及的模型,也不会触发Active Record回调。

http://apidock.com/rails/ActiveRecord/Base/update_all/class