ruby-on-rails - 使用 after_update 方法的 Rails 堆栈级别太深

标签 ruby-on-rails

我正在努力做到这一点,如果用户更改了两个 bool 变量(buyerseller)中的任何一个,它们可以在任一方向进行更改以触发action) 它将第三个变量 status_confirmed 的状态重置为 false

我的 user 模型中有以下内容:

after_update :reset_confirmed

  def reset_confirmed
    if self.buyer_changed? || self.seller_changed?
      self.update_attributes(status_confirmed: false)
    end
  end

据我所知,stack level too deep 错误是由于我找不到的无限循环或递归造成的。谁能看出我哪里出错了?

最佳答案

两种处理方法:

after_update :reset_confirmed
def reset_confirmed
  self.update_column(:status_confirmed, false) if self.buyer_changed? || self.seller_changed?
end

update_attributeupdate_column 之间的区别会对您有所帮助,因为后者 skips 回调(如果有)。

before_save  :reset_confirmed
def reset_confirmed
  self.status_confirmed = false if self.buyer_changed? || self.seller_changed?
end

在这里,您只是在将其保存到 db 之前分配一个值,所以...

希望对你有帮助..

关于ruby-on-rails - 使用 after_update 方法的 Rails 堆栈级别太深,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43797001/

相关文章:

ruby-on-rails - 如何在每次 Rails 控制台调用之前运行脚本?

ruby-on-rails - rspec 共享示例与共享上下文

ruby-on-rails - Rails 如何在不出错的情况下删除文件

ruby-on-rails - 使用named_scope的加性链接

html - Rails - 无法从数据库中添加样式为 ="background-image:url (' ') 的图像

ruby-on-rails - 即使使用 bundle exec 也会出现 "You have already activated"消息

javascript - 使用 EasyAutocomplete 的多输入字段 - Rails

javascript - 无法在 Rails 应用程序中触发 jQuery .change() 事件

ruby-on-rails - 如何自定义事件管理布局?

ruby-on-rails - Rspec/Mongoid 测试 JSON 响应失败,期望字段名称,但得到字段别名