我有一个问题update deals set count = count + 1.在Rails中,当我使用ActiveRecord执行此操作时,我可以想到
Deal.all.each { |deal| deal.update_attribute(:count => (deal.count + 1))}
Run Code Online (Sandbox Code Playgroud)
这需要更多的SQL查询而不是一个查询.有没有更好的方法在Rails中执行此操作(不直接在Rails应用程序中使用SQL查询).
Eva*_*van 19
Deal.update_all("count = count + 1")
Run Code Online (Sandbox Code Playgroud)
输出
UPDATE "deals" SET count = count + 1
Run Code Online (Sandbox Code Playgroud)
并有条件:
Deal.where(order_id: 2).update_all("count = count + 1")
Run Code Online (Sandbox Code Playgroud)
输出
UPDATE "deals" SET count = count + 1 WHERE "deals"."order_id" = 2
Run Code Online (Sandbox Code Playgroud)
如果ActiveRelation update_all所有记录与提供的一组条件匹配,则使用更新所有记录,还可以提供限制和订单.此方法构造单个SQL UPDATE语句并将其直接发送到数据库.它不会实例化所涉及的模型,也不会触发Active Record回调.
http://apidock.com/rails/ActiveRecord/Base/update_all/class
| 归档时间: |
|
| 查看次数: |
4942 次 |
| 最近记录: |