3

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

例如,这会注意到变化:

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

但这不会:

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

任何想法我可以如何以不同的方式做到这一点?

4

3 回答 3

2

changed?true如果您的对象上存在非持久更改,则返回。在您致电后,该对象是最新的——因此false返回。检查ActiveModel::Dirty模块,其中有几个实用程序来处理对象的更改。previous_changes可以做到这一点,也许有更适合您的用例的方法。

于 2012-06-07T20:20:17.333 回答
2

请记住,这changed?是指自上次保存点以来所做的更改。调用update_attributes!具有保存它并应用您的更改的效果。

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

于 2012-06-07T20:22:04.510 回答
0

你可以使用

m.attributes = {name: "John"}
于 2012-06-07T20:30:24.777 回答