Ruby 如何防止更新属性!缩短回调?

Ruby 如何防止更新属性!缩短回调?,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我想在保存事件之前进行检查,以便在每次更新特定字段时都能发出警报。 我试图使用“changed”来检测它,但更新了数据库验证的快捷方式,因此我无法使用changed 例如,这会注意到更改: m = Player.new m.name = "Tom" m.changed? => true 但这并不是: m = Player.new m.update_attributes!(name: "John") m.changed? => false 有什么办法可以改变吗?已更改?

我想在保存事件之前进行检查,以便在每次更新特定字段时都能发出警报。 我试图使用“changed”来检测它,但更新了数据库验证的快捷方式,因此我无法使用changed

例如,这会注意到更改:

m = Player.new
m.name = "Tom"
m.changed?  
=> true  
但这并不是:

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

有什么办法可以改变吗?

已更改?
如果对象上存在非持久性更改,则返回
true
。调用后,对象是最新的,因此返回
false
。检查
ActiveModel::Dirty
模块,其中有几个实用程序用于处理对象的更改<代码>以前的更改可以做到这一点,也许有一种更适合您的用例的方法。

记住,
更改?
指自上次保存点以来所做的更改。正在调用
更新属性具有保存和应用更改的效果

已更改?
方法和相关调用将只返回尚未保存的内容。

您可以使用

m.attributes = {name: "John"}

是的,我试着改变一下,结果成功了。但是我找到了一个更好的Ruby元编程选项,我最终改变了m.name\u?m、 你叫什么名字