对于任何后来在以后看到它的人来说,目前(2017年8月)在google上排名最高:值得一提的是,此行为将在Rails 5.2中更改,并且从Rails 5.1开始具有弃用警告,因为ActiveModel :: Dirty有所更改。
我要改变什么?
如果attribute_changed?
在after_*
-callbacks中使用method ,则会看到类似以下的警告:
声明警告:attribute_changed?
在下一个版本的Rails中,after回调内部的行为将发生变化。新的返回值将反映在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
在下一个版本的Rails中,after回调内部的行为将发生变化。新的返回值将反映在save
返回后调用方法的行为(例如,与现在返回的相反)。要保持当前行为,请saved_change_to_attribute
改用。(从/PATH_TO/app/models/user.rb:20的some_callback调用)
再次提及,该方法将名称更改为saved_change_to_attribute
return ["old", "new"]
。或使用saved_changes
,它返回所有更改,并且可以通过进行访问saved_changes['attribute']
。