如何在Rails 3中渲染视图后调用方法

3
我有一个任务需要花费约20-30秒的时间。我希望这个任务在视图呈现后立即运行。我希望将此任务的输出存储在会话变量中。在Rails 3中,最简单的方法是什么?
为了解释我需要的功能,我向用户展示一系列推文(这是已呈现的视图)。他们必须浏览它们。我希望在此视图呈现后调用一个方法,该方法将使用相同的推文并将它们进行聚类(20-30秒的过程)。我应该在会话中拥有聚类结果,以便在下一页中显示它们。
如何实现这一功能?

如果视图已经被渲染,任务如何将结果存储到会话中?(记住现在默认情况下会话是作为一个“cookie”处理的...) - sarnold
在我的情况下,会话是由 active_record 处理的。即使我只能运行一个方法,我也可以接受。现在,我将把结果存储在一些简单的 tmp 文件中。 - shishirmk
我认为我的答案是使用Resque或任何后台作业。 - shishirmk
2个回答

1

这是我解决问题的方法

  1. 我使用了resque来处理后台任务。在调用渲染之前,我将任务加入队列。
  2. 我编写了后台工作程序,将聚类结果放入redis缓存中。
  3. 在控制器中,我从redis中读取结果,对其进行反序列化并进行渲染。

虽然不完美,但对于研究反馈收集工具来说足够快速。


1

你应该能够在渲染视图的控制器方法中完成它。只需在“render”调用后添加代码即可。例如:

  def index
    @tweets = Tweet.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @tweets }
    end
    # do something with tweets
    puts "#{@tweets}"
  end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接