Rails回调改变了属性

时间:2014-08-06 16:05:16

标签: ruby-on-rails ruby callback

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

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

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

我该如何实现?

1 个答案:

答案 0 :(得分:4)

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

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

您希望仅在属性从false更改为true时才执行此操作。所以使用:

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

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

希望这有帮助。