2012-07-09 44 views
3

我正在使用Ruby,并且我需要在控制器中执行长时间运行的任务时向用户发送持续更新状态消息。如何将数据从控制器发送到ruby中的视图

该方法在数据库中插入一些行。我想要向用户显示如下消息:

正在上载,插入的文件数量为X.

目前我使用LoadMask jQuery插件,但它只显示一个简单的消息,我不知道如何发送中断过程中插入的行数。

+0

你可能必须以某种方式代表在数据库中长时间运行的任务,或至少将其存储在会话中。然后在你的控制器中添加一个新的方法,它可以返回当前状态的消息,并通过页面中的AJAX进行轮询。我怀疑你可以方便地将更新推送到长时间运行的控制器的视图中。 – millimoose 2012-07-09 22:26:02

回答

1

您应该考虑将这个长时间运行的过程转移到后台任务,以便您可以立即向用户提供反馈。一旦提交了后台作业,根据您的后台处理引擎,您将能够检查作业的状态。跟踪自己的状态可能很简单(取决于您的任务)。使用Redis或只是在你的数据库(为此创建一个单独的表)。作业提交后,您需要返回可用于轮询更新的作业的ID。

创建一个新的控制器(或操作),您可以使用jQuery + Ajax并轮询更改。给它一个作业ID(以前的操作返回其)

也请看看: 王菲:http://faye.jcoglan.com/http://railscasts.com/episodes/260-messaging-with-faye 巨人:http://postrank-labs.github.com/goliath/

http://railscasts.com/episodes/229-polling-for-changes

延迟工作,Resque等

哦,如果你只是在寻找一个简单的文件上传进度指示器,看看这个Rails, upload progress bar

您可以尝试流媒体技术为好,大量的信息在这里: Ruby on Rails 3: Streaming data through Rails to client

+0

我已决定运行一个后台任务,运行任务。为此,我在后台发现了非常有用的Railscast#127 Rake [link](http://railscasts.com/episodes/127-rake-in-background/) – 2012-07-10 18:05:03

0

这是Rails中的常见需求,使用JQuery通常是正确的方法。

虽然控制器和视图代码的细节取决于你如何建立你的应用程序,这里有一个良好的开端:

Railscast#136:jQuery的:http://railscasts.com/episodes/136-jquery/

一件事您需要考虑的是如何定期向您的方法报告迄今为止插入的行数。你有办法做到这一点吗?

首先回顾railscast - 它会让你了解如何进行至少下一步。

+0

这个答案似乎缺乏实际内容。 “看看这个与你的问题切线相关的指南”是不够的。 – millimoose 2012-07-09 22:24:00

+0

你的问题缺乏实际的代码。如果你不那么好,我不能给出具体的答案,包括代码。当我第一次学习如何动态地对网页进行AJAX更新时,那个railscast帮助我开始了,我认为它也可以帮助你。 – 2012-07-09 22:33:11

+0

这不是我的问题。 (OP的评论标有用户名后面的淡蓝色背景。)如果问题缺乏细节,最好要求澄清而不是只发布任何内容。尽管这些材料可能最终会有所帮助,但它并没有涉及OP *提到的几个细节,因此并不是真正解决问题的答案。 – millimoose 2012-07-10 09:44:16

相关问题