• フラッシュメッセージとは?

    └特定のアクションが実行されたときに、メッセージを画面上に表示させるためのもの。

    例えば、ログイン時に「ログインしました。」情報登録時に「登録しました。」などなど。。

    https://school.runteq.jp/v2/curriculums/rails_basic/chapters/7/hint

    https://school.runteq.jp/v2/curriculums/rails_basic/chapters/7/point

  • フラッシュメーセージの種類:

    success:(成功時)= redirect_toの際に使用する。

    danger:(失敗時)= renderの際に使用する。

    flash.:(成功時)次のリクエストまで表示させることができる。= redirect_toの際に使用する。

    flash.now.:(失敗時)現在のリクエストまでしか表示できない。= renderの際に使用する。

    notice.:通知を出す時。主に成功した時のメッセージなど。

    alert.:警告の通知を出す時。何かの動作に失敗時など。

    ※大体は、上の2つがよく使われる!!!

    参考文献:https://qiita.com/__Wata16__/items/a9fd1f26274cae1d08cc

  • フラッシュメッセージの翻訳定義を追加する:

    └フラッシュメッセージを表示させるときの表示内容をまとめる「ymlファイル」を作成する。

    [user_sessions/_controller.rb]
    
    def create
            @user = login(params[:email], params[:password])
            if @user
                redirect_back_or_to root_path, success: t('.success')
            else
                flash.now[:danger] = t('.fail')
                render :new
            end
        end
    
    [views/ja.yml]
    
    ja:
      defaults:
        login: 'ログイン'
        register: '登録'
        logout: 'ログアウト'
      users:
        new:
          title: 'ユーザー登録'
          to_login_page: 'ログインページへ'
        create:
          success: 'ユーザー登録が完了しました'
          fail: 'ユーザー登録に失敗しました'
      user_sessions:
        new:
          title: 'ログイン'
          to_register_page: '登録ページへ'
          password_forget: 'パスワードをお忘れの方はこちら'
        create:
          success: 'ログインしました'
          fail: 'ログインに失敗しました'
        destroy:
          success: 'ログアウトしました'
    
  • フラッシュの定義を追加する

    └Bootstrapに合わせて、フラッシュの定義をController全体で使えるように追加します。

    class ApplicationController < ActionController::Base
    	#以下にフラッシュの定義を書くことによって、controller全体で使えるようになる!!!
      **add_flash_types :success, :info, :warning, :danger**
    
      before_action :require_login
    
      private
    
      def not_authenticated
        redirect_to login_path
      end
      
    end
    
  • フラッシュメッセージの表示をViewに追加する

    └フラッシュメッセージを表示するパーシャル(部分テンプレートファイル)を作成する。

    views/shared/_flash_message.html.erb
    
    <% flash.each do |message_type, message| %>
      <div class="alert alert-<%= message_type %>"><%= message %></div>
    <% end %>
    
  • フラッシュメーセージを表示するパーシャルファイルを全体ビューファイルにrenderする。

    <body>
        <% if logged_in? %>
          <%= render 'shared/header' %>
        <% else %>
          <%= render 'shared/before_login_header' %>
        <% end %>
        **<%= render 'shared/flash_message' %>    ←<% end %>より外に書くこと!!**
        <%= yield %>
        <%= render 'shared/footer' %>
      </body>