如何防止update_attributes!快捷回调?

时间:2012-06-07 20:14:56

标签: ruby ruby-on-rails-3

我想在保存事件之前检查,以便每次特定字段更新时都可以发出警报。 我尝试使用“更改”来检测它,但update_attributes快捷方式的数据库验证,所以我无法使用更改?

例如,这注意到了变化:

m = Player.new
m.name = "Tom"
m.changed?  
=> true  

但这不是:

m = Player.new
m.update_attributes!(name: "John")
m.changed?  
=> false

我有什么想法可以这样做吗?

3 个答案:

答案 0 :(得分:2)

如果对象上存在非持久性更改,则

changed?会返回true。通话结束后,该对象是最新的 - 因此false返回。检查ActiveModel::Dirty模块,其中有几个实用程序来处理对象的更改。 previous_changes可以做到这一点,也许对你的用例有更合适的方法。

答案 1 :(得分:2)

请记住,changed?是指自上次保存点以来所做的更改。调用update_attributes!可以保存并应用更改。

changed?方法和关联的调用只会返回尚未保存的内容。

答案 2 :(得分:0)

你可以使用

m.attributes = {name: "John"}