【问题标题】:how to send data from controller to a view in ruby如何将数据从控制器发送到ruby中的视图
【发布时间】:2012-07-09 07:20:33
【问题描述】:

我正在使用 Ruby,我需要在控制器中执行长时间运行的任务时向用户发送持续更新状态消息。

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

正在上传,已插入 X 个文件。

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

【问题讨论】:

  • 您可能必须以某种方式在数据库中表示长时间运行的任务,或者至少将它们存储在会话中。然后向您的控制器添加一个新方法,该方法可以返回具有当前状态的消息,并通过页面中的 AJAX 轮询它。我怀疑您是否可以方便地将更新从长期运行的控制器“推送”到视图。

标签: jquery ruby-on-rails


【解决方案1】:

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

创建一个新的控制器(或动作),您可以使用 jQuery + Ajax 并轮询更改。给它一个 job_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

Delayed Job、Resque 等

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

您也可以尝试流式传输技术,这里有很多相关信息: Ruby on Rails 3: Streaming data through Rails to client

【讨论】:

  • 我决定为这个长时间运行的任务运行一个后台任务。为此,我发现 Railscast#127 Rake in Background link Regards 非常有用
【解决方案2】:

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

虽然控制器和视图的代码细节取决于您构建应用程序的方式,但这里是一个很好的起点:

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

您需要考虑的一件事是如何定期从您的方法中报告到目前为止插入的行数。你有办法吗?

首先查看 railscast ——它会让您了解如何至少进行下一步。

【讨论】:

  • 这个答案似乎缺乏实际内容。 “看看这个与你的问题切线相关的指南”是不够的。
  • 您的问题缺少实际代码。如果您不这样做,我也无法给出具体的答案,包括代码。当我第一次学习如何动态地对网页进行 AJAX 更新时,railscast 帮助我入门,我认为它也可以帮助你。
  • 这不是我的问题。 (OP 的 cmets 在用户名后面标有浅蓝色背景。)如果问题缺乏细节,最好要求澄清而不是张贴任何内容。虽然这些材料最终可能会有所帮助,但它甚至没有解决 OP 确实提到的少数细节,因此并不是问题的真正答案。
  • 我决定为这个长时间运行的任务运行一个后台任务。为此,我发现 Railscast#127 Rake in Background link Regards 非常有用
  • 对于后台任务,我目前使用的是 resque/redis——效果很好。见stackoverflow.com/questions/10475296/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-18
  • 1970-01-01
相关资源
最近更新 更多