2012-04-22 57 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 
相關問題