我想在保存事件之前检查,以便每次特定字段更新时都可以发出警报。 我尝试使用“更改”来检测它,但update_attributes快捷方式的数据库验证,所以我无法使用更改?
例如,这注意到了变化:
m = Player.new
m.name = "Tom"
m.changed?
=> true
但这不是:
m = Player.new
m.update_attributes!(name: "John")
m.changed?
=> false
我有什么想法可以这样做吗?
答案 0 :(得分:2)
changed?
会返回true
。通话结束后,该对象是最新的 - 因此false
返回。检查ActiveModel::Dirty
模块,其中有几个实用程序来处理对象的更改。 previous_changes
可以做到这一点,也许对你的用例有更合适的方法。
答案 1 :(得分:2)
请记住,changed?
是指自上次保存点以来所做的更改。调用update_attributes!
可以保存并应用更改。
changed?
方法和关联的调用只会返回尚未保存的内容。
答案 2 :(得分:0)
你可以使用
m.attributes = {name: "John"}