对于以后看到这一点的任何人,因为它目前(2017 年 8 月)在谷歌上名列前茅:值得一提的是,这种行为将在Rails 5.2中改变,并且从 Rails 5.1 开始有弃用警告,因为ActiveModel::Dirty发生了一些变化.
我要改变什么?
如果您attribute_changed?在 -callbacks 中使用方法after_*,您将看到如下警告:
弃用警告:attribute_changed?inside of after 回调的行为将在下一版本的 Rails 中改变。新的返回值将反映返回后调用方法的行为save(例如,与现在返回的相反)。要保持当前行为,请saved_change_to_attribute?改用。(从 /PATH_TO/app/models/user.rb:15 的 some_callback 调用)
正如它所提到的,您可以通过将函数替换为saved_change_to_attribute?. 例如,name_changed?变成saved_change_to_name?.
同样,如果您使用attribute_change来获取前后值,这也会发生变化并抛出以下内容:
弃用警告:attribute_changeinside of after 回调的行为将在下一版本的 Rails 中改变。新的返回值将反映返回后调用方法的行为save(例如,与现在返回的相反)。要保持当前行为,请saved_change_to_attribute改用。(从 /PATH_TO/app/models/user.rb:20 的 some_callback 调用)
同样,正如它所提到的,该方法将名称更改为saved_change_to_attribute返回["old", "new"]。或 use saved_changes,它返回所有更改,这些更改可以作为saved_changes['attribute'].