Model中的SystemStackError(堆栈级别太深)

时间:2016-09-16 20:15:42

标签: ruby-on-rails ruby 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

我哪里误入歧途?

1 个答案:

答案 0 :(得分:3)

var slickOptions = { autoplay: true, // rest of options }, $slick = $('.my-slick'); $slick.slick(slickOptions); // built-in feature, for more info check the [doc](http://kenwheeler.github.io/slick/) $slick.on('swipe', function(event, slick, direction) { reinitSlick(); }); $('.slick-prev, .slick-next').on('click', function(){ reinitSlick(); }); var reinitSlick = function() { $slick.slick('slickSetOption', { 'autoplay': false }, false); } 是一个回调。每次保存Mine实例时都会运行。

before_save中,您拨打assign_three_speed,最终呼叫self.update。该保存调用触发另一个回调周期,循环继续(直到它退出SystemStackError)。

尝试在回调中分配three_speed(而不是更新)。更改将持久保存到数据库,因为在模型保存之前分配

save