使用where
,我们可以Item.where('stock_amount > ?', 0)
。
问题:是否有一种方法可以在ActiveRecord中编写并生成以下SQL?
UPDATE items SET stock_amount = stock_amount - 10 where id = 1;
我尝试过
Item.update(1, {stock_amount: ['stock_amount - ?', 10]}
它可以运行,但不会生成我想要的SQL。
我知道我可以用更多的行来达到相同的结果
item = Item.find(1)
item.stock_amount = item.stock_amount - 10
item.save
并使用exec_update
ActiveRecord::Base.connection.exec_update('UPDATE items SET stock_amount = stock_amount - $1 WHERE id = $2', 'sql', [[nil, 10],[nil, 1]])
This post是我得到的最接近的东西。
答案 0 :(得分:3)
Item.where(id: 1).update_all(["stock_amount = stock_amount - ?", 10])
应产生:
UPDATE "items" SET stock_amount = stock_amount - 10 WHERE "items"."id" = $1 [["id", 1]]