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