2013-10-31 14 views
0

我試圖更新相關模型的屬性。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不喜歡我試圖從:qty

減去@invitem.units的方式,我得到

undefined method `-' for :qty:Symbol 

回答

0

您需要先將您的Matitem結果指定給對象,以便您可以訪問其數量:

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

感謝您的回答! – Reddirt

0

試試這個:

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

這將是清潔劑使用'減量'方法:

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

編輯:此外,你應該考慮改寫控制方法。遞減操作似乎是模型邏輯的一部分。使用Invitem模型中的before_create回調來減少關聯的matitem.qty(如果存在)。