Rails控制器减去一个数量

时间:2013-10-31 18:34:10

标签: ruby-on-rails

我正在尝试更新相关模型的属性。

正在创建的模型记录为invitem相关模型记录为matitem

这是我在invitem控制器中尝试的代码:

  def create
    @invitem = Invitem.new(params[:invitem])

    respond_to do |format|
      if @invitem.matitem_id != nil
        Matitem.find(@invitem.matitem_id).update_attributes(:qty => (:qty - @invitem.units))
      end
      if @invitem.save

Rails不喜欢我试图从@invitem.units

中减去:qty的方式

我得到了

undefined method `-' for :qty:Symbol

3 个答案:

答案 0 :(得分:4)

使用''减量''方法会更清晰:

Matitem.find(@invitem.matitem_id).decrement!(:qty, @invitem.units)

编辑:另外你应该考虑重写控制器方法。递减操作似乎是模型逻辑的一部分。使用Invitem模型中的before_create回调来减少相关的matitem.qty(如果存在)。

答案 1 :(得分:0)

您需要先将Matitem结果分配给对象,以便访问其数量:

matitem = Matitem.find(@invitem.matitem_id)
matitem.update_attributes(:qty => (matitem.qty - @invitem.units))

答案 2 :(得分:0)

请改为尝试:

@invitem.matitem.update_attribute(:qty, (@invitem.matitem.qty - @invitem.units))