2017-05-06 3 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 

はしかし、私はラインmerchant.save!にエラーSystemStackError: stack level too deepを得続けます。

この原因は何ですか?

答えて

1

.save!を使用しているため、after_savecallbackに再帰的にそのエラーが発生しています。 これを解決するには2通りの方法があります。どちらも参照できるhereが既に説明されています。

関連する問題