Programming Journal

学習したことの整理用です。

Bootstrapを利用したフラッシュメッセージの設定

Railsにおけるフラッシュメッセージ

フラッシュメッセージとは、ログインに成功/失敗したときなど、ページの一番上にでる一時的なメッセージのこと。 Railでは、flashというハッシュ形式のオブジェクトが設定されている。 デフォルトではnoticeとalertというキーがあるが、bootstrapを使用すると、これ以外のメッセージも使用できる。

Alerts · Bootstrap v4.5

Bootstrapを使えるようにキーを許可する。

application_controller.rb

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

パーシャル化しておく

いろんな場面で使用するので、パーシャル化する。 パーシャルを読み込めるように、application.html.erbにもrenderするように追記。 ※これを忘れて10分くらい悩んだ

_flash_message.html.erb

<% flash.each do |key, value| %>
  <p class="alert alert-<%= key %>">
    <%= value %>
  </p>
<% end %>

application.html.erb内で表示させたいところに追記。今回はヘッダーの下にした。

<%= render 'shared/flash_message' %>

フラッシュメッセージを表示させたいアクションに追記する。

このとき、redirect_to とrenderで使い方が違うので注意! 文字通り、redirect_toは指定した遷移先に飛ぶ。

先に行った許可設定のおかけで、Controllerのredirectの行にフラッシュメッセージも一行で記載できる。

def create
    @user = login(params[:email], params[:password])
    if @user
      redirect_back_or_to root_path, success: 'ログインしました'
    else
      flash[:danger] = 'ログインに失敗しました'
      render :new
    end
  end

昨日やったように、翻訳設定をしておいた方がいいかも

redirect_back_or_to root_path, success: t('.success')