Model

2016-09-16 66 views
1
中的SystemStackError(堆棧級別太深)

不確定這是爲什麼發生?仍然是noob ..Model

我只是在保存記錄之前更新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是一個回調。每次保存我的一個實例時它都會運行。

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

非常感謝!就是這樣..我會在一分鐘內接受答案..現在不會讓我 – ToddT