Поведение `attribute_changed?` внутри после обратных вызовов будет меняться
Я только что обновил проект до 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
, мои спецификации не будут переданы.
Мне сложно понять, каким должен быть соответствующий способ. Мне кажется, что это было до того, как он выполнял эту работу в порядке, не полностью понял причину этого изменения и как я должен избегать этих предупреждений об отказе.
Ответы
Ответ 1
новые имена для этих методов, которые более четко выражают, что вы ищете только что сохраненные изменения или будет сохранено.
В вашем случае, последний, вы должны использовать will_save_change_to_attribute?(:name)
.
Предупреждение об устаревании действительно вводит в заблуждение, так как оно упоминает только первый случай и предполагает, что оно должно произойти после обратного вызова.