对于以后看到这一点的任何人,因为它目前(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_change
inside 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']
.