属性の現在の値とパラメーターとして送信している値を計算して属性を更新する Rails モデルがあります。以下はレコードを更新し、属性の既存の値を上書きします
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
編集
以下の答えに本当に近づいていますが、これは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'