我的应用程序有时会执行更长时间的操作。如果可能的话,如果可能的话,我可以在执行操作之前渲染占位符文本,例如“处理...”,并将该页面替换为该操作的结果,前提是每个操作只能发出一次渲染?
答案 0 :(得分:1)
render方法的:text选项接受Proc对象:
render :text => proc { |response, output|
5.times do |i|
output.write("Hello, friend\n")
sleep 3
end
}
您的示例可能如下所示:
render :text => proc {|response, output|
output.wirte("Processing..")
results = perform_something
output.write(results)
}
如您所见,这里的'output'是一个可写的IO类对象。但是,你应该尽可能避免使用它。您可以在此处轻松地使用javascript显示“正在处理...”消息,然后在显示结果后从控制器接收xhr