Предупреждение об устаревании Rails 5 Поведение атрибута `attribute_change`

Я пытаюсь перейти на Rails 5.1.0 с 4.2 и получаю эту ошибку при запуске набора тестов Rspec.

DEPRECATION WARNING: The behavior of `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_changes.keys` instead. (called from has_changes? at /Users/djohnson/projects/EvantaAccessAPI/app/models/user.rb:280)

Я проверил несколько похожих вопросов Stackoverflow, но ни один из них не соответствовал моему сценарию. Я использую эластичный поиск и жевательную резинку, и эта строка есть в моей модели user.rb.

update_index('users') { self if has_changes? }

Который вызывает метод has_changes? ниже:

def has_changes?
  changes.empty? || (changes.keys & %w(first_name last_name title organization_name)).present?
end

Каков наилучший способ реорганизации этого, чтобы сохранить существующую функциональность и удалить эти предупреждения об устаревании?

Спасибо!


comment
Предупреждающее сообщение, кажется, точно описывает, что вы должны делать.   -  person MarsAtomic    schedule 25.04.2018
comment
Спасибо @MarsAtomic Я в значительной степени думал, что сам, но некоторые из содержания этого сообщения об устаревании заставили меня захотеть получить второе мнение. Это (например, противоположное тому, что оно возвращает сейчас) заставило меня нервничать. Но все работало и продолжает работать. ????   -  person Dan    schedule 08.11.2019


Ответы (1)


Я изменил тело метода на

saved_changes.empty? || (saved_changes.keys & %w(first_name last_name title organization_name)).present?

и, похоже, он работает так же, но без миллионов предупреждений об устаревании.

Кажется, то же самое касается changed?, который теперь предпочитает называться saved_changes?.

person Dan    schedule 25.04.2018