ruby-on-rails - Rails 回调更改属性

标签 ruby-on-rails ruby callback

我的用户模型中有一个 before_save 回调:

before_save :notify_management, :if => lambda { |u| u.approved }

这样做的目的是当人们将 approved 从 false 更改为 true 时通知管理层。但是,一旦它们变为 true,并对 User 模型进行任何类型的更改,就会调用此模型,而我不希望这样。我希望它仅在从 non true(nil 或 false)值更改为 true 时调用。

我怎样才能做到这一点?

最佳答案

所以首先让我们看看您的代码实际做了什么,

您正在触发 before_save 回调,因此每次创建或更新记录时 :notify_management 都会被调用。添加条件后,每当保存记录并且用户批准的属性为 true(false 以外的任何值时,都会调用 :notify_management)。

您只想在属性从 false 更改为 true 时执行此操作。所以使用:

before_save :notify_management, :if => lambda { |u| u.approved && u.approved_changed? }

通过添加第二部分,它只会在该属性发生变化时触发(从 false=>true 或 true=>false)并将其与您已经拥有的内容组合它只会在值从 false=> 更改时触发是的

希望这对您有所帮助。

关于ruby-on-rails - Rails 回调更改属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25165096/

相关文章:

ruby - 设置 Heroku 调试轨道运行器

ruby - 将 HAML 与自定义过滤器结合使用

javascript - 需要来自异步 API 调用的数据的构造函数?

node.js - Node.js async eachLimit 在这种情况下如何工作?

ruby-on-rails - 按数字顺序排序并列出目录中的文件

ruby-on-rails - 警告无法确定响应正文的内容长度。设置响应的内容长度或设置 Response#chunked = true

ruby-on-rails - 在 rails/ruby 中创建 pdf 发票

ruby-on-rails - 在 ApplicationController 中注册不同类型的回调

ruby-on-rails - 单击第二个带有 capybara 的模糊链接

c++ - C++ 的面向对象回调?