前面我有一个控制器类,它创建了一个服务的示例,并调用服务方法“synchronize”,如下所示。在'synchronize'方法完成后,rails用于将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”方法执行起来有点长,我创建了一个延迟作业来执行我的“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后立即执行,我在Job类中使用after_perform方法:
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类调用“render”,因为它只能从控制器调用。在这个后台作业完成后,我如何将JSON消息呈现回我的node.js(UI)?
2条答案
按热度按时间d6kp6zgx1#
'Nil'
或者返回delayed_job输出的JSON对象。ogq8wdun2#
您必须从Job调用
ApplicationController.render
才能使渲染工作。