2016-09-16 2 views
1

なぜこれが起こっているのか分かりませんか?まだnoob ..SystemStackError(スタックレベルが深すぎる)モデル

私はレコードを保存する前にMineテーブルのフィールドを更新しています。すべての変数が正確に引き込まれています。以下の行は、それが想定していたものも返します。

CreateFulfillmentService::NON_US_MARKETPLACES.include?(self.marketplace) 

そしてselfMineのインスタンスです。そしてself.marketplaceは正しい市場を返します。

これは私のコントローラ私が道に迷って行きました

class Mine < ActiveRecord::Base 
    belongs_to :shop 
    validates :merchant_id, presence: true 
    validates :auth_token, presence: true 
    before_save :assign_three_speed 

def assign_three_speed 
    if CreateFulfillmentService::NON_US_MARKETPLACES.include?(self.marketplace) 
    self.update(three_speed: false) 
    else 
    self.update(three_speed: true)  
    end 
end 

end 

のですか?

答えて

2

before_saveはコールバックです。 Mineのインスタンスを保存するたびに実行されます。

assign_three_speedには、self.updateが呼び出され、saveが呼び出されます。そのセーブコールは別のコールバックサイクルを引き起こし、ループは永遠に続きます(SystemStackErrorで終了するまで)。

代わりに(更新する代わりに)コールバックにthree_speedを割り当ててみてください。のモデルが保存される前に、割り当てがになるため、変更はデータベースに反映されます。

def assign_three_speed 
    if CreateFulfillmentService::NON_US_MARKETPLACES.include?(self.marketplace) 
    self.three_speed = false 
    else 
    self.three_speed = true 
    end 
end 
+0

ありがとうございました!それは...私は答えを1分で受け入れるでしょう。 – ToddT

関連する問題