A Little Each Day

note to self

Railsでflashメッセージを表示する方法

こんにちは。本日はRailsでフラッシュメッセージ(投稿やログインに成功・失敗した場合やユーザーへの簡易的なお知らせ)を表示する方法です。

Railsには簡単にフラッシュメッセージを表示できる機能があるので順番に見ていきましょう。

バージョン

Ruby '2.2.1'
Rails '4.2.1'


application.html.erbの編集

フラッシュメッセージはメッセージを表示したい部分に書きます。

サイトの上部(ヘッダーの下)にメッセージを表示したいと思うので、ここではapplication.html.erbに書いていきます。


まずapplication.html.erbの<%= yield %>の上の部分に以下のようなコードを書きます。

# application.html.erb 

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


これでアプリケーション全体でフラッシュメッセージを表示できるようになりました。


controllerのコード

application.html.erbを修正したので今度はcontrollerを見ていきましょう。

今回はユーザーが投稿して成功したらフラッシュメッセージを表示するようにしたいと思います。

成功した時のメッセージはcreateアクションにメッセージを明示します。

flashオブジェクトはハッシュのように扱うことができるのでcontrollerを以下のようにかきます。

# posts_controller.rb

def create
  @post = Post.new(post_params)
     if @post.save
       flash[:success] = 'Post was successfully created.'
       redirect_to @post
     else
       render :new
     end
end


では試しに投稿してみましょう。

f:id:chi_kun:20160405021228p:plain


きちんと投稿が成功してflashメッセージが表示されていますね。


今回はbootstrapを適用したアプリだったので、よく見慣れたライトグリーンのフラッシュメッセージになっています。

もちろん自分で好きな色を指定して変える事もできますのでbootstrapが気に入らないひとは自分色にするのもいいかもしれませんね。



本日は以上です。