Html 在rails中呈现视图后计算代码

Html 在rails中呈现视图后计算代码,html,ruby-on-rails,ruby,Html,Ruby On Rails,Ruby,在rails中,我构建了一种cronjob,但是一旦视图呈现在那里,我就希望像处理任务的“签准”一样运行一些代码 我应该将代码放在哪里,以便在处理的绝对结束时运行(一旦呈现视图) rails如何处理html缓冲区?(它会在呈现时向用户刷新HTML还是在呈现后向用户刷新HTML?要从呈现的HTML中选择元素,可以使用javascript/JQuery读取值: $(document).ready(function() { var completion = $('#item

在rails中,我构建了一种cronjob,但是一旦视图呈现在那里,我就希望像处理任务的“签准”一样运行一些代码

我应该将代码放在哪里,以便在处理的绝对结束时运行(一旦呈现视图)


rails如何处理html缓冲区?(它会在呈现时向用户刷新HTML还是在呈现后向用户刷新HTML?

要从呈现的HTML中选择元素,可以使用javascript/JQuery读取值:

    $(document).ready(function() {  
        var completion = $('#items_processed').val();  
     });

可以将视图渲染为字符串,捕获渲染时可能发生的任何超时,记录操作结果,然后返回字符串:

begin
  @elements = Element.find(:all)
  html = render_to_string
  # Store the result
  Result.create(:element_count => @elements.count)
rescue Timeout::Error
  # Store the result of the call as failed?
  Result.create(:element_count => 0)
end
send_data html, :disposition => 'inline', :type => 'text/html'
为实现目标,您可以做的其他一些事情可能是:

  • 如果需要执行的代码仅由cron作业触发,则可以使用rake任务而不是控制器操作

  • 您可以调用脚本向控制器发出请求,检查请求的输出,然后记录结果(可能通过在控制器中调用新操作),而不是在cron作业中直接使用wget发出请求


  • 是的,如果在堆栈底部注入中间件,则可以获取渲染结果。响应包含
    html
    。如何在控制器中实现它?在
    format.html
    之后(如果它在那里-它并不总是出现在所有控制器中),此操作需要能够阻止渲染,还是需要管理?如果您不需要此代码来阻止视图呈现,您可以在控制器上使用
    after_filter
    。您的中间件可能仍然会更改html输出,因此在控制器中执行此操作是有风险的。cron最后需要html输出,对于处理的4000个项目,它只是一个类似4000的数字,完成后,只需在db中注销4000项即可,但如果超时则不应。。因此,在结束时这样做的原因是(它几乎不会超时,但这是一种安全措施)我将它作为cron任务运行,因此它的wget调用我不太确定它是否会处理javascript。