deviseでフラッシュメッセージを利用する
deviseを導入し、サインインやログアウトをした際に、画面上部に”ログインしました。” ”ログアウトしました。”のようなメッセージを表示できるようにする。
1.フラッシュメッセージのビューを作成
フラッシュメッセージ用のビューファイル_notifications.html.erbをviews/layoutsに配置し、application.html.erbのbody内でrenderで読み込む。
flashはデフォルトで"notice(動作成功時)"と"alert(失敗時)"の2つのキーを作成する。
_notifications.html.erb
<% flash.each do |key, value| %>
<%= content_tag(:div, value, class: #{key}) %>
<% end %>
application.html.erb
<body>
<%= render 'layouts/notifications' %>
<%= yield %>
</body>
2.フラッシュメッセージにCSSを適用させる
flashオブジェクトでnoticeとalertキーを作成しているので、それぞれに対しCSSを適用させる。
_flash.css
.notice {
color: white;
background-color: blue;
}
.alert {
color: white;
background-color: red;
}
[番外]deviseの日本語化
deviseはデフォルトで英語設定されているので、上記で表示できるようになったフラッシュメッセージは英語。これを日本語表記に変更する。
gemのインストール
gem 'rails-i18n', '~> 5.1' #railsのバージョンにより変更させる
$bundle install
$rails s
日本語ファイルをダウンロードし、config/locales以下に配置
日本語化のためにapplications.rbを編集
application.rb
class Application < Rails::Application
config.i18n.default_locale = :ja
end