2011-05-23 108 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