Каков эффект от вызова model.save!в обратном вызове after_create для сохраненного_обмена_атрибута?в обратном вызове after_save? - PullRequest
0 голосов
/ 06 мая 2019

Я установил обратный вызов after_save, чтобы проверить, изменился ли атрибут или нет, чтобы создать какое-либо событие.Но существует обратный вызов after_create, который использует model.save !.Сколько раз вызывается метод generate_event и каков результат save_change_to_attribute?в обратном вызове generate_event?

after_create :set_references
after_save :generate_event

def set_references
    self.md_mms = self.id_token
    self.md_mms_id = self.id_token
    self.save!
 end

def generate_event
    if self.saved_change_to_status?
      event = Event.create!(resource: self, company: self.company, resource_id_token: self.id_token, resource_status: self.status)
      EventResourceStateUpdateJob.perform_later(event)
    end
  end

Я ожидал save_change_to_status?вернуть истину, но она возвращает ложь.

1 Ответ

0 голосов
/ 06 мая 2019

Ваши обратные вызовы не имеют смысла, вы не должны вызывать работника в after_save, это не гарантирует сохранение записи. Вместо него должно быть after_commit, а set_references должно быть before_save, поскольку вы устанавливаете атрибуты, а также saved_change_to_status? в качестве аргумента для вашего обратного вызова. И нет необходимости звонить сохранить в ваших обратных вызовов.

before_save :set_references
after_commit :generate_event, if: :saved_change_to_status?

def set_references
  self.md_mms = self.id_token
  self.md_mms_id = self.id_token
 end

def generate_event
  Event.create(resource: self, company: self.company, resource_id_token: self.id_token, resource_status: self.status)
  EventResourceStateUpdateJob.perform_later(event)
 end
...