我正在尝试更新相关模型的属性。
正在创建的模型记录为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
答案 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))