flash

railsのコントローラとビューで使えるflashは、自動クリア機能付きのセッションみたいなものです。

flash[:notice] = 'このメッセージは次のアクションが実行された後消えます'

通常redirect_to と合わせて使用するもので、リダイレクトされたアクションでflash[:notice]には値が入っていて、そこでrenderして、その後何らかのアクションが実行された時にはflash[:notice]はnilになります。

これが基本的な使い方だと思うのですが、renderする際のエラーメッセージの表示にも便利なので、リダイレクトしない場合でも使います。その時にはこんな感じで使います。

flash.now[:notice] = 'このメッセージはこのアクションが実行された後消えます'

逆にリダイレクトした先で、さらにリダイレクトする場合はこんな感じ

# 最初のアクション
flash[:notice] = 'このメッセージは次のアクションが実行された後消えます'
redirect_to :action => 'an_action'

# 次のアクション(an_action)
flash.keep
redirect_to :action => 'another_action'

っていう風にするとanother_actionでは、flash[:notice]には値が入っています。

これでflashの使い方は正しいと思うんだけど、変だよ!って思うところがあったら教えてください。

追記

flashflash.nowかっていちいち判断するのは面倒なので、ビューではこんな風にしてしまうのが楽チンです。

<%= flash[:notice] %>
<% flash[:notice] = nil %>