我已经设置了一个after_save
回调来检查属性是否已更改以创建某些事件。但是存在一个使用model.save!的after_create回调。 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吗?返回true,但返回false。
答案 0 :(得分:0)
您的回调没有意义,您不应该在after_save中调用工人,它不能保证记录得以持久。应该是after_commit
,而set_references
应该是before_save
,因为您正在设置属性,还需要saved_change_to_status?
作为回调的参数。并且无需在您的回调中调用save。
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