Как мне написать Rails ActiveRecord запрос на обновление с динамическим связыванием? - PullRequest
0 голосов
/ 12 ноября 2018

С 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]])

Этот пост является самым близким, что я получаю.

1 Ответ

0 голосов
/ 12 ноября 2018
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]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...