環境
ruby 3.2.1
rails 6.1.7.3
devise 4.9.2
フラッシュメッセージの表示
deviseでは、認証メッセージがflash []
に格納される。
成功系 → flash[:notice]
失敗系 → flash[:alert]
格納された値をリダイレクト先のviewで呼び出したい箇所に配置する。
view
<% flash.each do |type, message| %>
<%= content_tag(:div, message,
class: "alert alert-#{type == 'notice' ? 'success' : 'danger'}" %>
<% end %>
- content_tagヘルパーでHTMLを生成しています。nameがnoticeの場合にはsuccessクラスを、それ以外の場合にはdangerクラスを付与しています。
フラッシュメッセージの非表示
ログアウトした時はフラッシュメッセージは表示したくないなど、特定の処理でフラッシュメッセージを非表示にしたい場合は、config/locales/devise.en.yml
ファイルで非表示にしたい処理メッセージを空文字列にします。
config/locales/devise.en.yml
en:
devise:
sessions:
signed_in: "Signed in successfully."
signed_out: ""
already_signed_out: "Signed out successfully."
フラッシュメッセージの編集
フラッシュメッセージを編集したい場合、config/locales/devise.en.yml
ファイルを編集します。
日本語に変換することもできます。
config/locales/devise.en.yml
en:
devise:
sessions:
signed_in: "編集"
signed_out: "編集"
already_signed_out: "編集"
gemを使って日本語にする
config/application.rbに以下の行を追加して、日本語をデフォルトの言語に設定します。
application.rb
config.i18n.default_locale = :ja
gemをインストール
Gemfile
gem 'rails-i18n'
gem 'devise-i18n'
$ bunlde install
日本語対応のファイルを生成
$ rails g devise:i18n:views user
以上で日本語に対応するようになります。