Как я могу обновить состояние экземпляра класса после того, как Sidekiq завершил выполнение задания? - PullRequest
0 голосов
/ 13 января 2020

У меня есть этот метод в моей модели, и я хочу обновить состояние scheduled до sent, как только Sidekiq завершит работу.

def deliver_message_and_update_state
    if email_scheduled_at?
      SendMessageWorker.perform_at(email_scheduled_at, id)
      self.update(state: "scheduled")
    else
      SendMessageWorker.perform_async(id)
      self.update(state: "sent")
    end
end

1 Ответ

1 голос
/ 14 января 2020

Ваш работник sidekiq не знает о текущем экземпляре модели. Итак, вы должны обновить состояние в конце работника, т.е. после реализации вашего кода в работнике.

В вашей модели

def deliver_message_and_update_state
  self.update(state: "scheduled")
  SendMessageWorker.perform_in(self.email_scheduled_at, self.id)
end

В вашем работнике

class SendMessageWorker
  def perform(id)
  <Your code>
  YourModel.find(id).update(state: "sent")
  end
end
...