LoginSignup
0
0

More than 1 year has passed since last update.

flashに任意のキーをセットして表示するには

Last updated at Posted at 2022-09-21

環境

Rails 5.2
Ubuntu20.4

はじめに

flashにはオプションとして、noticealertの2つのキーが用意されていますが、任意でnoticeとalert以外のキーを設定して、取り出して表示することもできるようになっています。

普通のやり方

標準的な使い方をする場合は、noticeとalertだけを使います。コントローラーでflashにメッセージを設定します。

test_controller.rb
flash[:alert] = "アラートです。"
flash[:notice] = "注意事項です"
redirect_to test_url

flashの変数の中身を見ると、alertとnoticeに値が正しくセットされていることが確認できます。

#<ActionDispatch::Flash::FlashHash:0x00007fb89c859f88 @discard=#<Set: {}>, @flashes={"alert"=>"アラートです。", "notice"=>"注意事項です"}, @now=nil>

alertとnoticeの内容はビューの中で次のようにして表示します。

application.html.slim
- if flash.alert.present?
    .alert.alert-danger = flash.alert

- if flash.notice.present?
    .alert.alert-success = flash.notice

BootstrapのAlertに次のように表示されました。
無題1.png

任意のキーを作成

flashにnotice1、notice2というキーを作成して値をセットしました。notice1、notice2というキーは、flashで標準で用意されていないキーです。

test_controller.rb
flash[:notice1] = "注意事項その1"
flash[:notice2] = "注意事項その2"
redirect_to test_url

flashの変数の中身を見ると、ちゃんとnotice1とnotice2に値がセットされていることが確認できます。

#<ActionDispatch::Flash::FlashHash:0x00007fb8a324fa00 @discard=#<Set: {}>, @flashes={"notice1"=>"注意事項その1", "notice2"=>"注意事項その2"}, @now=nil>

notice1とnotice2の内容をビューで表示させようとしたところ、1行目で次のエラーが表示されました。

undefined method 'notice1'

flashにはハッシュのnoticeキーと同じ名前のnoticeメソッドが用意されているようです。ハッシュのnotice1キーは自作したキーであるため、この名前のメソッドは標準では用意されていません。よって、notice1というメソッドは存在していませんというエラーが出てきたということです。

application.html.slim
- if flash.notice1.present?
    .alert.alert-success = flash.notice1

- if flash.notice2.present?
    .alert.alert-success = flash.notice2

ハッシュのキーを指定することなく、ハッシュのセットされている値を全て表示させるには、次のようにすると表示することができます。

application.html.slim
- flash.each do |key, value| 
    div.alert.alert-success
        = value

notice1とnotice2の値がビューに表示されました。
無題2.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0