Подтвердить что ты не робот

Поведение `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, мои спецификации не будут переданы.

Мне сложно понять, каким должен быть соответствующий способ. Мне кажется, что это было до того, как он выполнял эту работу в порядке, не полностью понял причину этого изменения и как я должен избегать этих предупреждений об отказе.

4b9b3361

Ответ 1

новые имена для этих методов, которые более четко выражают, что вы ищете только что сохраненные изменения или будет сохранено.

В вашем случае, последний, вы должны использовать will_save_change_to_attribute?(:name).

Предупреждение об устаревании действительно вводит в заблуждение, так как оно упоминает только первый случай и предполагает, что оно должно произойти после обратного вызова.