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メッセージが表示される。