ruby-on-rails - 模型中的 SystemStackError(堆栈级别太深)

标签 ruby-on-rails ruby model

不确定为什么会这样??还是菜鸟..

我只是在保存记录之前更新 Mine 表中的一个字段。所有变量都被准确地引入了。下面的行也返回了它应该的内容。

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

selfMine 的实例。 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/

相关文章:

ruby-on-rails - 尝试使用全新的应用程序运行 Rails 服务器后出现 URI 问题

ruby - 使用适用于 Mac OS X 10.7.5 Leopard、Xcode 4.5.2 的 Ruby 完成 ruby​​ 1.9.3 的安装——rvm pkg install openssl 的问题

ruby - 使用访问器方法即时创建对象

ruby-on-rails - Ruby On Rails 模型中的自保存

javascript - 更新模糊在 angularjs 中不起作用

ruby-on-rails - Ruby on rails 如何在数组中找到与另一个数组中的项目匹配的第一个项目

ruby-on-rails - rails : CLEAN special characters from English or Arabic String

ruby-on-rails - capybara / cucumber 的 sleep 功能?

ruby-on-rails - Rails 帮助简单表单 : undefined method `model_name' for Hash:Class

php - 从 Laravel 中的关系中删除全局范围