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
を効果的に使うとユーザビリティが向上すると思うので、しっかり使いこなせるようになります。。。