Ruby on rails Rails回调已更改属性

Ruby on rails Rails回调已更改属性,ruby-on-rails,ruby,callback,Ruby On Rails,Ruby,Callback,我的用户模型中有一个“保存前”回调: before_save :notify_management, :if => lambda { |u| u.approved } 这样做的目的是当人们将approved从false更改为true时,通知管理层。然而,一旦它们变为true,并对用户模型进行任何类型的更改,就会调用这个,我不希望这样。我希望它仅在从非true(nil或false)值更改为true时调用 我怎样才能做到这一点呢?首先让我们看看您的代码实际上做了什么 您正在触发before_

我的用户模型中有一个“保存前”回调:

before_save :notify_management, :if => lambda { |u| u.approved }
这样做的目的是当人们将approved从
false
更改为
true
时,通知管理层。然而,一旦它们变为true,并对用户模型进行任何类型的更改,就会调用这个,我不希望这样。我希望它仅在从
非true
(nil或false)值更改为
true
时调用


我怎样才能做到这一点呢?

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

您正在触发before_save回调,因此无论何时创建或更新记录,都将调用notify_management。使用添加的条件,
:每当保存记录且用户批准的属性为
true
(除
false
nil
之外的任何内容)时,都会调用notify_management

仅当属性从false更改为true时,才需要执行此操作。因此,请使用:

before_save :notify_management, :if => lambda { |u| u.approved && u.approved_changed? }
通过添加第二部分,它将仅在该属性已更改(从false=>true或true=>false)时触发,并将其与您已经拥有的内容相结合,它将仅在值从false=>true更改时触发


希望这能有所帮助。

因此,首先让我们看看您的代码实际上做了什么

您正在触发before_save回调,因此无论何时创建或更新记录,都将调用notify_management。使用添加的条件,
:每当保存记录且用户批准的属性为
true
(除
false
nil
之外的任何内容)时,都会调用notify_management

仅当属性从false更改为true时,才需要执行此操作。因此,请使用:

before_save :notify_management, :if => lambda { |u| u.approved && u.approved_changed? }
通过添加第二部分,它将仅在该属性已更改(从false=>true或true=>false)时触发,并将其与您已经拥有的内容相结合,它将仅在值从false=>true更改时触发

希望这有帮助