読者です 読者をやめる 読者になる 読者になる

Rails Webook

自社のECを開発している会社で働いています。Rails情報やサービスを成長させる方法を書いていきます

Rails4でユーザーに簡易なメッセージをflashで表示する

Rails初級 Rails Controller

Railsでは、ログイン時のメッセージや、登録や更新時の成功通知などの簡易な通知のために、flashという仕組みが用意されています。

動作確認

  • Rails 4.1

目次

  1. flashメッセージの設定と表示
  2. 1リクエスト内のみで有効なflashメッセージ
  3. リダイレクト時のflashメッセージ


1. flashメッセージの設定と表示

コントローラー内でflashオブジェクトがハッシュのように使うことができます。
一度表示されるまでflashメッセージは残り、表示されると自動的に削除されるので特に削除処理は必要ありません。

def index
  flash[:notice] = "ようこそ。本日は#{Date.today}です。"
end


そして、ビューファイルにこのfalshの内容を表示する表示するように記載します。レイアウトファイルに記載しておくとよいでしょう。

# app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
  <title>ControllerTest</title>
  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
  <%= csrf_meta_tags %>
</head>
<body>
<!-- 追記部分 開始 -->
<% flash.each do |key, value| %>
  <%= content_tag(:div, value, class: "#{key}") %>
<% end %>
<!-- 追記部分 終了-->

<%= yield %>

</body>
</html>


2. 1リクエスト内のみで有効なflashメッセージ

通常のflashメッセージは、そのアクション自体か、リダイレクトした次のアクションで利用します。
一度表示されるまでflashメッセージは残ってしまうので、予期しないメッセージを表示してしまう箇所もあります。
そういうときには、flash.nowを使って設定します。

def index
  flash.now[:notice] = "ようこそ。本日は#{Date.today}です。"
end


3. リダイレクト時のflashメッセージ

リダイレクト時によくflashを使うので、redirect_toメソッドのオプションとしてnoticealertが用意されています。
これを利用することで、flash[:notice]flash[:error]と同様の記述となります。

# flash[:notice]にメッセージを設定しながら、リダイレクトをしている
redirect_to @user, notice: 'ログインに成功しました'

# flash[:alert]にメッセージを設定しながら、リダイレクトをしている
redirect_to login_url, alert: 'ログインできませんでした'

以上です。

参考文献