flashメッセージの出し方

controllerのflashメッセージを出したいところでフラッシュの定義をする。

flash[:〇〇] = △△ # 〇〇はキー名,△△は表示させたいメッセージ

flashはハッシュのような使い方ができる。

flash:
    success:
      login: 'ログインしました'
      logout: 'ログアウトしました'
      create_user: 'ユーザー登録が完了しました'
    danger:
      login: 'ログインに失敗しました'
      create_user: 'ユーザー登録に失敗しました'

とlocales/views/ja.ymlに設定をした。

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

とuser_sessions_controllerに書き込み、views/layouts/application.html.erbには、

 <body>
    <%= render 'shared/flash_message' %>
    <% if  logged_in? %>
      <%= render 'shared/header'%>
    <% else %>
      <%= render 'shared/before_login_header'%>
    <% end %>
    <%= yield %>
    <%= render 'shared/footer'%>
  </body>

<%= render 'shared/flash_message' %>を書き加えることで表示をさせる。 肝心のshared/flash_messageには

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

と書いている。flahe[:〇〇] = △△の〇〇がmessage_typeに、△△がmessageに代入される。 これでflashメッセージが表示される。