【问题标题】:Rails callback changed attributeRails 回调更改属性
【发布时间】:2014-09-29 15:59:57
【问题描述】:

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

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

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

我怎样才能做到这一点?

【问题讨论】:

    标签: ruby-on-rails ruby callback


    【解决方案1】:

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

    您正在触发 before_save 回调,因此在任何时候创建或更新记录时都会调用 :notify_management。使用添加的条件,只要保存记录并且用户批准的属性是 true(除 falsenil 之外的任何内容),就会调用 :notify_management

    您只想在属性从 false 更改为 true 时执行此操作。所以使用:

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

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 2012-01-28
      • 2018-07-21
      • 2014-08-10
      • 1970-01-01
      相关资源
      最近更新 更多