ztbuz@dev

人生に絶望しているZが、それでも技術を身につけようと必死になるブログ

Ruby on Railsのflashの使い方

Ruby on Railsを学んでいると度々出てくるflashについて、しっかり学ぼうと思い、使い方をまとめてみました。

基本的な使い方

コントローラでflashをセット

まず、以下のようにflashにメッセージをセットします。

flash[:success] = 'アカウントを作成しました。'
redirect_to root_url

# このようにも書ける
# redirect_to root_url, :flash => { success: 'アカウントを作成しました。' }

ビューでflashを表示

あとは、以下のようにflashを表示させるだけです。 content_tagを使うとスッキリします。

<% flash.each do |key, value| %>
<%= content_tag :div, value, class: "flash flash-#{key}" %>
<% end %>

生成されるHTML

生成されるHTMLは以下のようになります。

<div class="flash flash-success">アカウントを作成しました。</div>

flashのメソッド

以下に詳しいのですが、特徴的なものをいくつか書きます。

flash.now

flash.nowは、そのアクションでflashを消す際に用います。 たとえば、先ほど以下のように書きました。

flash[:success] = 'アカウントを作成しました。'

普通はこれでよいのですが、たとえばrenderでビューを指定すると、アクションが進む訳ではないので、flashが2回表示されることになります。 これを避けるために、flash.nowを用います。

flash.now[:success] = 'アカウントを作成しました。'

flash.keep

これは、flashを保持したいときに用います。 通常であれば消えるところを、flash.keepを用いることによって、次のアクションまで保持することができます。

flash.keep # flash 全体を保持する
flash.keep(:success) # :success のみを保持する

flash.discard

discardは「破棄する」という意味ですが、その名のとおりflashを破棄します。

flash.discard # flash 全体を破棄する
flash.discard(:success) # :success のみを破棄する

おわりに

flashを効果的に使うとユーザビリティが向上すると思うので、しっかり使いこなせるようになります。。。