Раньше у меня был класс контроллера, который создавал экземпляр службы и вызывал метод службы «синхронизировать», как показано ниже. После завершения метода 'synchronize' рельсы использовались для рендеринга сообщения JSON обратно в мой node.js.
if @service.valid_connection?
@service.synchronize
render json: {
status: :unprocessable_entity,
errors: @service.message
}, status: :ok
else
render json: {
status: :unprocessable_entity,
errors: @event.errors.full_messages
}, status: :ok
end
Однако, поскольку мой метод 'synchronize' был немного долгим для выполнения, Я создал отложенное задание, которое берет на себя мою задачу «синхронизировать». Итак, в настоящее время мой контроллер выглядит так:
if @service.valid_connection?
::Events::WegSyncJob.perform_later(event_id, b_cancelled)
else
render json: {
status: :unprocessable_entity,
errors: @event.errors.full_messages
}, status: :ok
end
Теперь я не могу разместить здесь свой рендер JSON, поскольку он будет немедленно выполнен после того, как задание будет передано в delayed_job, я использую метод after_perform в мой класс Job как:
after_perform do |job|
//below code is wrong
render json: {
status: :ok,
message: "Check notifications"
}, status: :ok
end
def perform(event_id, b_cancelled)
//call to synchronize
end
Однако я не могу вызвать «рендеринг» из моего класса Job, так как это возможно только с контроллера. Как я могу вернуть сообщение JSON в свой node.js (UI) после завершения этого фонового задания?