0

アイデアは次のとおりです。

  • バックグラウンドで時間のかかるアクションを実行します。
  • コールバックを使用して、そのアクションの結果をコントローラーに反映させます。
  • 結果をインメモリ セッション ストアに格納します。
  • その時点からセッションの結果を使用して利用できるようにします。

非同期コールバック

コントローラーはコールバックで結果を受け取ります。

# controller callback, saves result to session
# this method is executed as expected
# session id matches the one from other controller actions
def on_counter_value_calculated(context, new_value)
  @counter = new_value
  session[:counter] = @counter
end

ただし、保存されたセッションは後続の呼び出しで失われます。

# although the same session is targeted (same id)
# the saved value is not the same
def index
  @counter = session[:counter] || 0
end

この問題を示す小さな Rails プロジェクトを作成しました: https://github.com/elvanja/controller_callbak_store_in_session

任意の入力をいただければ幸いです。

4

1 に答える 1