2017-05-06 67 views
0

我正在编写一个活动记录事务的测试。 引发错误的方法如下所示;SystemStackError:堆栈级别太深 - 数据库事务

after_save :process_transaction_fees 

def process_transaction_fees 
    if self.status == "SUCCESS" 
     transaction_fees = 0.0299 #improve after success 
     merchant = Business.find_by_id(self.business_id) 

     transaction_charges = (self.amount * transaction_fees).to_f 

     balance = merchant.balance 
     balance_before = merchant.balance 
     balance_after = (balance_before.to_f - transaction_charges.to_f) 

     merchant_deposit = BusinessTransaction.new(business_id: self.business_id ,amount: transaction_charges, balance_before: balance_before, balance_after: balance_after, status: "SUCCESS") 
     merchant.balance = (balance.to_f - transaction_charges.to_f) 

     ActiveRecord::Base.transaction do 
     merchant.save! 
     merchant_deposit.save! 
     end 
    end 
    end 

不过,我不断收到错误SystemStackError: stack level too deep就行merchant.save!

这可能是什么原因造成的?

回答

1

由于您使用的是.save!,因此它会根据after_savecallback递归抛出该错误。 解决这个问题的两种方法已被解释,您可以参考here

相关问题