2009-10-16 5 views
38

私の基本的な使用例は何らかの処理を行い、flash[:notice]に設定して、新しいページにリダイレクトします。私が知ることから、リダイレクトはフラッシュタグをリセットします(私が間違っていると私を修正してください)。永続性を得る方法はありますか?セッションの使用はオプションではありません。私はクッキーを使用して問題をハッキングしましたが、もっと良い方法があるはずです。リダイレクトを使用してフラッシュハッシュを取得する

+0

ルビーのドキュメントを参照してくださいフラッシュん[:お知らせ]は、リダイレクトレンダリングしていない時に現れますか?標準のレイアウトがロードされていますか? – EmFi

答えて

74

フラッシュハッシュは、まさに1つのリダイレクトまたはレンダリングに対して存続します。だから、デフォルトの設定でうまくいくはずです。

別のリクエスト/リダイレクトのためにフラッシュハッシュを保持する必要がある場合は、flash.keepを呼び出すことができます。

+0

セッションが無効になっているなど、これが常に正しいとは限りません。私の用途では当てはまりません(flash [:notice]は標準レイアウトの一部として表示する必要がありますが、リダイレクトではなくレンダリングの前に設定されていなければ表示されません)。 –

+0

ビューで明示的にflash [:notice]を参照するとどうなりますか? – EmFi

+0

リダイレクト後?何もない。リダイレクトが含まれていない場合、同じ文字列が割り当てられていることがわかります。 –

1
flash.keep # keep the entire flash hash around for an extra request. 
flash.keep(:notice) # keep just flash[:notice] for an extra request. 

少なくともレールV3.2.1に注意すべき何かがフラッシュは、その少なくとも1つのリダイレクトを通じて全く参照しない場合、リダイレクトを通じて持続した後の同じビューをロードすることです。かかわらず、リダイレクトの存在している:[メッセージ]フラッシュにつながる、これを実行する

def some_action 

(code that may set a flag to redirect 1 time) 

redirect_to action_path if(redirect_flag) 
.... 
end 

:これは私の最近の経験の擬似コードです。フラッシュリダイレクトが発生しなかったとき、[]それだけ現れるだろうを参照ロガーで、デバッグ中に

def some_action 
logger.debug("Flash[:message] #{flash[:message]}") 

(code that may set a flag to redirect 1 time) 
redirect_to action_path if(redirect_flag) 
.... 
end 

。私はリダイレクトの前にフラッシュへの参照を追加して明白な理由がないのにラインを失った場合、これが問題になることが分かりました。

はここ(Instance protected method: Use at the bottom)

+0

ああ、ありがとう!要求レベルでフラッシュしたログをいくつか追加して、なぜフラッシュが複数のリダイレクトによって保存されなくなったのか混乱しました。このようなことをしたいのであれば、 'request.session ['flash']'(少なくともRails 4では)フラッシュを読むことができ、それは通常のアクセサを通過しません。通常、フラッシュは参照されているとマークする。 – Ibrahim

関連する問題