不确定为什么会这样??还是菜鸟..
我只是在保存记录之前更新 Mine
表中的一个字段。所有变量都被准确地引入了。下面的行也返回了它应该的内容。
CreateFulfillmentService::NON_US_MARKETPLACES.include?(self.marketplace)
self
是Mine
的实例。 self.marketplace
返回正确的市场。
这是我的 Controller
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
我哪里误入歧途了?
最佳答案
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
关于ruby-on-rails - 模型中的 SystemStackError(堆栈级别太深),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39539466/