2012-04-22 14 views
3

私は約20〜30秒かかります。このタスクは、ビューがレンダリングされた直後に実行します。私はこのタスクの出力をセッション変数に保存したい。それを行う最も簡単な方法は何ですか?ビューがレンダリングされた後にメソッドを呼び出す方法3

正確に何が必要なのかを説明します。私はユーザーにツイートのリストを表示しています(これはレンダリングされたビューです)。私はこのビューがレンダリングされた後に呼び出され、同じツイートを受け取り、それらをクラスター化する(20〜30秒プロセス)メソッドを必要とします。私は次のページにそれらを表示することができるように、セッションでクラスタリングの結果を持っている必要があります。

どうすればよいですか?

+0

ビューがレンダリングされている場合、タスクは結果をセッションにどのように格納できますか? (セッションは現在デフォルトで_cookie_として扱われています...) – sarnold

+0

私の場合、セッションはactive_recordによって処理されます。私は方法を実行することができても大丈夫です。私は今、いくつかの単純なtmpファイルに結果を保存します。 – shishirmk

+0

私の答えは、Resqueまたはバックグラウンドジョブを使用していたと思います。 – shishirmk

答えて

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 
関連する問題