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更改时触发
希望这有帮助