我的用户模型中有一个before_save回调:
before_save :notify_management, :if => lambda { |u| u.approved }
这样做的目的是当人们从false
批准更改为true
时,通知管理层。但是,一旦它们变为true,并对User模型进行任何类型的更改,这个就会被调用,我不希望这样。我希望它仅在从non true
(零或假)值更改为true
时调用。
我该如何实现?
答案 0 :(得分:4)
首先让我们看看你的代码实际上做了什么,
您正在触发before_save回调,因此无论何时创建或更新记录:notify_management
都将被调用。添加条件后,只要保存记录并且用户批准的属性为:notify_management
(除true
或false
之外的任何内容),系统会调用nil
。
您希望仅在属性从false更改为true时才执行此操作。所以使用:
before_save :notify_management, :if => lambda { |u| u.approved && u.approved_changed? }
通过添加第二部分,它只会在该属性发生变化时触发(来自false => true或true => false)并将其与您已经拥有的内容相结合,只有当值从false更改时才会触发=>真
希望这有帮助。