Кожен, хто бачить це пізніше, як це наразі (серпня 2017 року) очолює google: Варто зазначити, що ця поведінка буде змінена в Rails 5.2 та має попередження про депресію щодо Rails 5.1, оскільки ActiveModel :: Dirty трохи змінився .
Що я можу змінити?
Якщо ви використовуєте attribute_changed?метод у after_*-викликах, ви побачите попередження типу:
ПОПЕРЕДЖЕННЯ ПОПЕРЕДЖЕННЯ. У 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'].