Любой, кто увидит это позже, так как он в настоящее время (август 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']
.