我刚刚将项目升级到Rails 5.1.0,并且我看到了这个弃用警告。
DEPRECATION WARNING: The behavior of `attribute_changed?`
inside of after callbacks will be changing in the next version of Rails.
The new return value will reflect the behavior of calling the method
after `save` returned (e.g. the opposite of what it returns now).
To maintain the current behavior, use `saved_change_to_attribute?` instead.
我的代码看起来像这样
class MyClass
before_valiadtion :my_method
def my_method
if name_changed?
...
end
end
end
我不完全理解弃用警告。如果我使用saved_change_to_name
,它会在保存后检查它,但这是在验证回调之前。
我还注意到,如果我将name_changed?
更改为saved_change_to_name
我的规格没有通过。
我很难理解适当的方法应该是什么。在我看来,在它完成工作之前是怎么回事,没有完全理解这种变化背后的原因以及我应该如何避免这些弃用警告。
答案 0 :(得分:12)
有new names for these methods更清楚地表达了您正在寻找刚刚保存的或即将保存的的更改
在你的情况下,后者,你应该使用will_save_change_to_attribute?(:name)
。
弃用警告确实具有误导性,因为它只提到第一种情况,并假设它必须在后回调中发生。