0

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

正在创建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
4

3 回答 3

4

使用 ''decrement'' 方法会更干净:

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

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

于 2013-10-31T18:44:10.390 回答
0

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

matitem = Matitem.find(@invitem.matitem_id)
matitem.update_attributes(:qty => (matitem.qty - @invitem.units))
于 2013-10-31T18:40:49.877 回答
0

试试这个:

@invitem.matitem.update_attribute(:qty, (@invitem.matitem.qty - @invitem.units))
于 2013-10-31T18:40:52.473 回答