我有应用程序,我存储产品及其数量,我已经创建了控制器交付,我已经有product_id,我也有价值。
所以现在发货后我想更新我的产品数量。 (将交货值添加到当前值)
我想把这段代码放到交付控制器中的创建动作中,但我不知道怎么做?
def create
@delivery= Delivery.new(delivery_params)
respond_to do |format|
if @delivery.save
@ingredient = Ingredient.find(params[:ingredient_id])
@ingredient.update_attributes(:quantity => :quantity + :delivered)
....
但它并没有这样做。也许在保存之前我需要找到成分?任何事情都会有所帮助
答案 0 :(得分:2)
您可以尝试以下代码(假设交付的数量存储在plain = 'VGhpcyBpcyBsaW5lIG9uZQpUaGlzIG' +
'lzIGxpbmUgdHdvClRoaXMgaXMgbGlu' +
'ZSB0aHJlZQpBbmQgc28gb24uLi4K'
属性中):
delivered
如果您想完全使用@ingredient.quantity += @delivery.delivered
@ingredient.save
方法:
update_attributes
答案 1 :(得分:0)
你可以使用增量!
例如
@ingredient.quantity.increment!
或者如果你需要增加一个以上
@ingredient.quantity.increment!(amount)
答案 2 :(得分:0)
作为一个基本的评论,我建议从DelliveryController中重构一下Ingredient的东西。例如,您可以在交付模型中执行after_save回调。
class Delivery < ActiveRecord::Base
after_save :update_ingredients
def update_ingredients
// do the update here
end
end
可能你甚至应该考虑创建一个单独的Object来处理它。阅读本文寻找灵感:https://blog.engineyard.com/2014/keeping-your-rails-controllers-dry-with-services