是否有Rails方法来检查观察者中哪些属性已更新?

时间:2010-10-11 05:32:28

标签: ruby-on-rails attributes observer-pattern

我有一个ActivityObserver,它正在观察tasks,并且有一个after_update回调。

我想测试update中是否修改了某个特定属性。

是否有Rails方法将主题的属性与更新前的属性进行比较,或检查它们是否已更改?

2 个答案:

答案 0 :(得分:9)

当执行after_update回调时,每个ActiveModel对象都有一个名为changed_attributes的方法。您可以在调试环境中查看它。每个ActiveRecord对象都有此方法。它具有已更改/修改的所有值的哈希值。这也称为脏对象。

查看其中一些教程

Railscasts

Dirty Object

答案 1 :(得分:1)

你的观察者必须有类似的事情。

class ActivityObserver < ActiveRecord::Observer

  def after_update(activity)
    if activity.attribute_name_changed?
      puts "The above condition will return true or false, and this time it has returned true..!!!"
    end
  end

end

以上方法都可以。我想你在找这个......