Model

2016-09-16 71 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