质量增量字段为1

rub*_*nce 14 ruby-on-rails

我有一个问题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)


Sye*_*lam 9

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

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

  • @rubyprince因为SQL可以根据其当前值更新列.`更新some_table SET some_col = some_col + 1`.也许你会从学习SQL中受益? (4认同)
  • @Syed Aslam如何在传递静态字符串的地方进行SQL注入? (4认同)