Ваш работник 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