アイデアは次のとおりです。
- バックグラウンドで時間のかかるアクションを実行します。
- コールバックを使用して、そのアクションの結果をコントローラーに反映させます。
- 結果をインメモリ セッション ストアに格納します。
- その時点からセッションの結果を使用して利用できるようにします。
コントローラーはコールバックで結果を受け取ります。
# 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
任意の入力をいただければ幸いです。