Запустить before_create перед before_save - PullRequest
0 голосов
/ 19 сентября 2018

В цепочке обратных вызовов ActiveRecord, before_save запускается перед before_create:

before_validation 
after_validation 
before_save 
around_save 
before_create 
around_create 
after_create 
after_save 
after_commit/after_rollback

Проблема в том, что у меня есть before_create, которое устанавливает reference_number.И у меня есть before_save, который проверяет измененные атрибуты и работает с измененными атрибутами.Так как before_create вызывается после before_save, этот reference_number не считается измененным атрибутом, и поэтому я не могу работать с ним:

before_create :set_reference_number
before_save :set_denormalized_fields

def set_reference_number
   prefix = determine_type ? 'CO' : 'CA'
   self.reference_number = "#{prefix}-#{1}"
end

def set_denormalized_fields
  if changes.any?
    handle_changed_attributes changes
  end
end

Как изменить цепочку обратного вызова, чтобы гарантировать, что reference_number является измененныматрибут, когда я вызываю set_denormalized_fields?

1 Ответ

0 голосов
/ 19 сентября 2018

Вы можете добавить условие типа if changes.any? || new_record?, но вы должны быть уверены, что атрибут действительно установлен.

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