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
ソフトウェア会社(SIer)で10年以上勤務のシステムエンジニア|ポケットWiFi使用歴2年以上|ポケットWiFi+αで快適でお得なインターネット環境を構築するための情報を発信|その他、IT情報やWebサービス、アプリ、ガジェットなどの情報を発信|自分と他の人のカバンの中身を紹介するメディア「カバンの中身ラボ(https://kaban-no-nakami-labo.com/)」も運営しています。 ポケットWiFi選びに迷ったらTwitter、お問合せフォームからご連絡ください。