Я сейчас нахожусь в процессе обновления с Rails 5.0 до Rails 5.1. Одно из изменений - в ActiveRecord::Dirty
, описанном в https://github.com/rails/rails/commit/16ae3db5a5c6a08383b974ae6c96faac5b4a3c81. Короче говоря, метод attribute_was
теперь устарел, потому что его поведение различается в зависимости от того, находитесь ли вы в настоящее время в ловушке after_save
или за его пределами.
Согласно этому описанию должен быть эквивалентный метод в Rails 5.1, но я не смог узнать. В частности, мне интересно, как решить описанный ниже сценарий.
Предположим, я обрабатываю веб-запрос и обрабатываю запись с атрибутом A, который имеет некоторое начальное значение V1 (которое может быть nil
).
- В момент t1 я могу или не могу изменить A с V1 на V2
- В момент t2, когда я не знаю , нахожусь ли я в
after_save
hook или before_save
(или еще даже не позвонил save
), я хочу знать, каким было начальное значение A, и ответ должен быть V1
. Как я могу узнать? - Вызов
A_before_last_save
возвращает nil
, когда я нахожусь в ловушке before_save и V1 в ловушке after_save - Вызов
A_in_database
возвращает V1, когда я нахожусь в ловушке before_save и V2 в хуке after_save - Вызов
A_was
в настоящее время возвращает правильное значение V1 как before_save, так и after_save, но показывает предупреждение об устаревании, что он начнет возвращать V2 в хуке after_save в будущей версии Rails.
Я что-то упустил? Есть ли способ выполнить sh это?