はじめに
deviseを使っていると必ずと言っていいほど使うアクセス制限をかけるためのヘルパーメソッドauthenticate_user!。
制限をかけた際にログイン画面にページ遷移しますが、何も設定をしないとなぜページ遷移したかわかりにくいので「ログインして下さい。」等々エラーメッセージを表示させた方が、ユーザー目線を考慮したサイトにすることができます。
ポートフォリオを作成していた際に、そんな風に思い組み込んだことを備忘録として書き留めておきます。
①エラーメッセージの表示方法
②エラーメッセージの日本語化
前提
・gem deviseを使用している。
・before_action :authenticate_user!を使用したいコントローラに記述している。
【参考サイト】
Rails deviseで使えるようになるヘルパーメソッド一覧
①エラーメッセージの表示方法
authenticate_user!を使用した際に「ログインもしくはサインアップが必要です」のようなメッセージを表示させたい際は、下記記述を任意のviewにしてあげれば出ます。
<%= alert %>
上記記述をしてauthenticate_user!が正常に動作した場合、
以下devise.en.ymlの17行目あたりに記載してあるエラー文が出るはずです。
unauthenticated: "You need to sign in or sign up before continuing."
deviseには元々エラー文章が用意されているようなので、
あとはそれを呼び出すための記述をしてあげれば良いわけですね。
簡単簡単!
『...余談』
<%= notice %>を使用すればログイン時に「ログインしました」的な文章を出すことも可能です。
簡単ですね。
②エラーメッセージの日本語化
devise.ja.ymlの導入
先ほどはdevise.en.ymlの中から文章を引っ張ってました。
今回は日本語化するためにdevise.ja.ymlを導入していきます。
(en=english / ja=japaneseの意)
config/localesにdevise.ja.ymlファイルを作成し、
中身はdevise-i18n/ja.yml at master - GitHubからコピペして保存。
gem 'rails-i18n'のインストール
gem 'rails-i18n'
上記記述をして、bundle installを実行。
インストールはこれで完了です。
###config/application.rbに記述を追加
config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
1行目だけでも機能する場合もありますが、しない時もあるらしく、
2行目は必要に応じて記述してください。
以上で、日本語化は完了。