如何在交付时使用Ruby on Rails 4.2增加产品数量

时间:2015-10-14 14:45:17

标签: ruby-on-rails ruby activerecord rails-activerecord

我有应用程序,我存储产品及其数量,我已经创建了控制器交付,我已经有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)
    ....

但它并没有这样做。也许在保存之前我需要找到成分?任何事情都会有所帮助

3 个答案:

答案 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