2011-05-23 139 views
2

我有貸款與交易對象的Rails 3應用程序。當交易被保存,我想扣減Loan.amount_remaining的Transaction.amount在after_save的模型的方法,modify_loan,在交易模型。的Rails 3更新關聯模型

這是該代碼的最好的地方(而不是要求在貸款模型的更新方法),如果是這樣,我怎麼從交易模式,訪問和保存貸款數據?

這是我一直在努力做的事情:

class Transaction < ActiveRecord::Base 
belongs_to :loan 
belongs_to :customer 
after_save :modify_loan 

def modify_loan 
    newamount = Loan.amount_remaining - self.amount 
    if amount >= 0 
     Loan.amount_remaining = newamount 
    else 
     nil 
    end 
end 
end 

然而,這顯然是行不通的。有誰知道這樣做的正確方法?我覺得我已經使用Model.build發現了一些相關的問題,但是這是如何使用的?

回答

3

由於您試圖更新不同的型號(Loan而不是Transaction),因此您需要手動保存更新。此外,你打電話Loan(整個班級),而不是loan(您的交易的貸款)。這應該工作:

def modify_loan 
    newamount = loan.amount_remaining - self.amount 
    loan.update_attributes(:amount_remaining => newamount) 
end 
+0

謝謝!這是有道理的,並且交易沒有發生任何錯誤。但是,Loan.amount_remaining未正確更新。看來,self.amount從未減去即使Transaction.amount在交易數據庫顯示正確。你知道這是爲什麼嗎? self.amount正確的方式來做到這一點? – Justin 2011-05-23 18:34:28