我的用户模型中有一个 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/