2012-04-22 96 views
3

我有一项任务需要大约20至30秒。我想让这个任务在渲染视图后立即运行。我希望将此任务的输出存储在会话变量中。什么是最简单的方法来实现它3.如何在视图渲染完成后调用方法3

为了解释我需要的东西。我向用户展示了一个推文列表(这是呈现的视图)他们必须通过他们。我想要一个方法在呈现这个视图后被调用,它将采用相同的推文并将它们集群(20-30秒的过程)。我应该在会话中获得聚类结果,以便我可以在下一页中显示它们。

我该怎么做?

+0

如果视图已被渲染,该任务如何将结果存储到会话中? (请记住,会话现在默认作为_cookie_处理......) – sarnold 2012-04-23 00:00:13

+0

在我的情况下,会话由active_record处理。即使我可以运行一种方法,我也可以。我现在将把结果存储在一些简单的tmp文件中。 – shishirmk 2012-04-23 00:04:55

+0

我认为我的答案是使用Resque或任何后台作业。 – shishirmk 2012-10-25 23:53:30

回答

1

这是我如何解决我的后台任务所用resque问题

  1. 。我在调用渲染之前让任务排队。
  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