我有一个带有Loan和Transaction对象的Rails 3应用程序。保存事务时,我想从事务模型中的after_save模型方法modify_loan中的Loan.amount_remaining中扣除Transaction.amount。
这是此代码的最佳位置(与在贷款模型中调用更新方法相反),如果是,那么如何从事务模型中访问和保存贷款数据?
以下是我一直在尝试做的事情:
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在SO上找到了一些相关的问题,但这是如何使用的?
答案 0 :(得分:3)
由于您尝试更新其他型号(Loan
而不是Transaction
),因此您需要手动保存更新。此外,您正在调用Loan
(全班),而不是loan
(您的交易贷款)。这应该有效:
def modify_loan
newamount = loan.amount_remaining - self.amount
loan.update_attributes(:amount_remaining => newamount)
end