Любой, кто увидит это позже, так как он в настоящее время (август 2017 г.) возглавляет Google: стоит упомянуть, что это поведение будет изменено в Rails 5.2 и имеет предупреждения об устаревании, начиная с Rails 5.1, как ActiveModel :: Dirty немного изменилась ,
Что я могу изменить?
Если вы используете attribute_changed?метод в after_*-callbacks, вы увидите предупреждение вроде:
ПРЕДУПРЕЖДЕНИЕ ОБ УСТАРЕВАНИИ: Поведение attribute_changed?внутри обратных вызовов будет изменено в следующей версии Rails. Новое возвращаемое значение будет отражать поведение вызова метода после saveвозврата (например, противоположное тому, что он возвращает сейчас). Чтобы сохранить текущее поведение, используйте saved_change_to_attribute?вместо этого. (вызывается из some_callback в /PATH_TO/app/models/user.rb:15)
Как уже упоминалось, вы можете легко это исправить, заменив функцию на saved_change_to_attribute?. Так, например, name_changed?становитсяsaved_change_to_name? .
Аналогично, если вы используете attribute_changeдля получения значений до и после, это также изменяется и выдает следующее:
ПРЕДУПРЕЖДЕНИЕ ОБ УСТАРЕВАНИИ: Поведение attribute_changeвнутри обратных вызовов будет изменено в следующей версии Rails. Новое возвращаемое значение будет отражать поведение вызова метода после saveвозврата (например, противоположное тому, что он возвращает сейчас). Чтобы сохранить текущее поведение, используйте saved_change_to_attributeвместо этого. (вызывается из some_callback в /PATH_TO/app/models/user.rb:20)
Опять же, как упоминалось, метод меняет имя, на saved_change_to_attributeкоторое возвращается ["old", "new"]. или используйте saved_changes, который возвращает все изменения, и к ним можно получить доступ как saved_changes['attribute'].