flashメッセージ

flashメッセージの設定方法

flashオブジェクトは、デフォルトでalertキーとnoticeキーが設定されているが、特定のキーを指定する事でBootstrapに用意されているスタイルのフラッシュを利用できるようになる。 [app/controllers/application_controller.rb]に以下の記載をする事で、デフォルトのalertキーとnoticeキー以外で、Bootstrapに用意されているスタイルのフラッシュを定義できる。 また、上記の設定を行うことでControllerのredirectをフラッシュメッセージを含めて1行で記載できる。 add_flash_typesを定義しなくても毎回flashを記載すればフラッシュメッセージの表示はできるが、なるべく記述量を減らすようにする。

class ApplicationController < ActionController::Base
  add_flash_types :success, :info, :warning, :danger
end

下記のようにflashメッセージには、lazy lookup記法を使って翻訳情報を利用した方が国際化にも適している。

def create
    @user = login(session_params[:email], session_params[:password])
    if @user
      redirect_back_or_to root_path, success: (t '.success')
    else
      flash.now[:danger] = (t '.fail')
      render :new
    end
  end

Bootstrapを適用したflashメッセージを表示するために、[views/shared/flash_message.html.erb]などのファイルを作り[views/layouts/application.html.erb]などからrenderするなどする。 [views/shared/flash_message.html.erb]に以下のような記載をして、Bootstrapを適用したflashメッセージを表示する。

<% flash.each do |message_type, message| %>
  <div class="alert alert-<%= message_type %>"><%= message %></div>
<% end %>

Bootstrapを利用したキーとflashメッセージの見た目

f:id:kosukerino:20210427204639p:plain

参考記事:

https://qiita.com/Yama-to/items/4d19a714d8bf5bfbabdd