Rails

【Rails】flashの仕組みと使い方まとめ(図解あり)

Railsでflashを使うことで、ユーザーに対してのメッセージを簡単に表示することができます。

この記事ではそんなflashの使い方と仕組みをまとめています。

flashとは

flashとはページが切り替わった時にユーザーに対してのメッセージを簡単に表示することができるメソッド。

flashの特徴
  • flashはキーに対する値としてメッセージを設定できるハッシュのようなもの
  • flashはsessionに格納される
  • flashは一度表示されると、sessionから自動的に削除される
  • flashの格納先であるsessionはブラウザのCookieである
  • Cookieが無効になっているブラウザではflashに登録されたメッセージは表示されない

Railsのflash基本構文

flashはコントローラで登録して、ビューで表示します。

コントローラ(登録)の構文

ビュー(表示)の構文

Railsのflashの仕組み

flashは登録した次のビュー(ページ)へ「遷移」したときに表示され、情報が削除される。

そのため、さらに次のビュー(ページ)に「遷移」した時には表示されません。

なぜ「遷移」を強調しているかというと、ページを「遷移」させるのは「redirect_to」を使用した場合になるからです。

「redirect_to」と同じようにページを切り替える方法として「render」があります。

ここで注意が必要なのは「render」はページを「遷移」させているのではなく、強制的にページを「表示」させているだけということです。

ですので、「render」を使用した場合は「表示」したページでflashメッセージが表示されるが、さらに次のビュー(ページ)に「遷移」した時にもflashメッセージは残ったままとなってしまいます。

以下のようなイメージ。

これだと「render」で使用する場合はflashメッセージは使い物にならないように思えます。

render使用時の問題の対策:flashメッセージを現在のページで表示する

上記のような「render」時の問題を解決をするためにはコントローラで「flash.now」を使用する。

こうすることによってflashメッセージは今の表示に対して行うことになります。

以下のようなイメージです。

Railsのflash応用構文

flashの応用構文を紹介します。

flashメッセージの生存期間を1ページ分長くする:flash.keep

次ページに「遷移」した時のコントローラで「flash.keep」を使用することで、flashメッセージの生存期間を1ページ分長くできる。

以下のようなイメージになります。

flashメッセージに埋め込まれたHTMLタグを変換して表示する:html_safe

コントローラでflashメッセージにHTMLタグを埋め込まれる場合は、ビュー側で「html_safe」を使用することでHTMタグを正常に変換して表示することができる。

注意点として、formの入力値をflashメッセージに格納して表示する場合は悪意のあるscriptを埋め込まれる可能性があるためHTMLタグの変換は行わないようにする必要があります。

まとめ

  • flashメッセージはユーザーに対してのメッセージを簡単に表示するために使用する
  • flashメッセージはCookieが有効でないと使用できない
  • flashメッセージの生存期間は、ビュー(ページ)の「遷移」(redirect_to)1回分
  • flash.keepを使用することでflashメッセージの生存期間をビュー(ページ)の「遷移」1回分延長できる
  • renderはページを強制的に「表示」させているだけなのでflashメッセージは削除されない
  • flashメッセージ内のHTMLタグはビュー側で「html_safe」メソッドを使用することで正常に変換することができる
  • flashメッセージ内のHTMLタグを変換する場合はセキュリティに注意する
ABOUT ME
Jyu2
【PC1台で稼ぐブロガー兼Webエンジニアを目指し中】IT情報やWebサービス、アプリなどの情報を発信/SIerで10年以上勤務→ストレスMAXで休職中→ブログとWebの学習を行い脱サラ計画中/ #30DAYSトライアル 1st完了→2nd実施中 / 日々の学習内容をブログにアウトプット / まずは月収5万円を目指す