В Rails 5.1+, как мне узнать начальное значение атрибута, если я не знаю, нахожусь ли я в ловушке after_save? - PullRequest
1 голос
/ 06 августа 2020

Я сейчас нахожусь в процессе обновления с 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 это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...