У меня есть модель рельсов, где я хочу обновить атрибут, вычислив текущее значение этого атрибута плюс значение, которое я отправляю в качестве параметра. Ниже будет обновлять запись и перезапись существующего значения атрибутаRails 3.2 условия обновления
def self.mark_receipt(qty_received,client_id,product_code)
Product.where(:client_id => client_id, :product_code => product_code)
.update_all(:qty_on_hand => :qty_received,
:qty_received => qty_received)
end
Я хочу что-то больше похоже на это, но следующий синтаксис не работает.
def self.mark_receipt(qty_received,client_id,product_code)
Product.where(:client_id => client_id, :product_code => product_code)
.update_all(:qty_on_hand => :qty_on_hand + qty_received,
:qty_received => :qty_received + qty_received)
end
EDIT
Получение очень близко с ниже ответ, но это то, что SQL работает в фоновом режиме
Product Load (0.5ms) SELECT `products`.* FROM `products`
WHERE `products`.`client_id` = 1 AND `products`.`product_code` = '88-89c'
SQL (0.6ms) UPDATE `products`
SET `qty_on_hand` = 165, `qty_received` = 165
Вместо
UPDATE `products`
SET `qty_on_hand` = 165, `qty_received` = 165
WHERE `products`.`client_id` = 1 AND `products`.`product_code` = '88-89c'
С вашим ответом я получаю ActiveRecord :: PreparedStatementInvalid (неверное число переменных привязки (1 для 2) в: qty_on_hand = qty_on_hand +?, Qty_received = qty_received +?): – ctilley79
извините, я просто замечаю, что я забыли добавить второй параметр. Попробуйте сейчас –
Это сделало. Спасибо – ctilley79