フラッシュメッセージの実装

<やること>

・ログイン、ログイン失敗、ログアウトのフラッシュメッセージの実装方法。

・フラッシュメッセージの表示を viewに追加する際、パーシャルを用いる。

 

①コントローラー全体にフラッシュメッセージの定義をする。

 app/controllers/application_controller.rbは

 コントローラー全体に設定を反映することができるため

add_flash_types :success, :info, :warning, :danger

  をapplication_controller.rbに記載する。

 

ログイン・ログアウトの際のフラッシュメッセージを追加

 今回はログイン、ログアウト関連なので

 app/controllers/user_sessions_controller.rbにフラッシュメッセージを追加していく。

 より見やすくするため、flashを省略し、直接redirect_(省略)に1行で書けるかたちにする。

 success: t('.create.success')の部分がメッセージそのものになっていないのは、

 後ほど、翻訳(i18n)を用いるため。

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

 

フラッシュメッセージのパーシャルを作成する

  パーシャルはファイル名の最初に「_」を入れて作成する。

  app/views/shared/_flash_message.html.erbを作成。

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

  上記のように記載する。

 

④パーシャルをレイアウトに追加する

 app/views/layouts/application.html.erb に記載した内容は他のviewに反映することが

 できるために以下を埋め込む。

<%= render partial: 'shared/flash_message' %>

  ファイル名は_flash_message.html.erbだったが、埋め込む際は「_」を除く必要がある。

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

 config/locales/views/ja.ymlに表示したいフラッシュメッセージの文言を追加していく。

user_sessions:
new:
create:
success: "ログイン"
fail: "ログインに失敗"
destroy:
success: "ログアウト"
 

  ※少しインテンドがズレるだけで、表記がきちんとできなくなるので注意が必要。

   追記をしている内にズレて表記されなくなることがあった。