1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】deviseで行うアクセス制限にエラーメッセージを表示させる。

Posted at

はじめに

deviseを使っていると必ずと言っていいほど使うアクセス制限をかけるためのヘルパーメソッドauthenticate_user!。
制限をかけた際にログイン画面にページ遷移しますが、何も設定をしないとなぜページ遷移したかわかりにくいので「ログインして下さい。」等々エラーメッセージを表示させた方が、ユーザー目線を考慮したサイトにすることができます。

ポートフォリオを作成していた際に、そんな風に思い組み込んだことを備忘録として書き留めておきます。
①エラーメッセージの表示方法
②エラーメッセージの日本語化

前提

・gem deviseを使用している。
・before_action :authenticate_user!を使用したいコントローラに記述している。
【参考サイト】
Rails deviseで使えるようになるヘルパーメソッド一覧

①エラーメッセージの表示方法

authenticate_user!を使用した際に「ログインもしくはサインアップが必要です」のようなメッセージを表示させたい際は、下記記述を任意のviewにしてあげれば出ます。

application.html.erb
<%= alert %>

上記記述をしてauthenticate_user!が正常に動作した場合、
以下devise.en.ymlの17行目あたりに記載してあるエラー文が出るはずです。

config/locales/devise.en.yml
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'のインストール

Gemfile
gem 'rails-i18n'

上記記述をして、bundle installを実行。
インストールはこれで完了です。

###config/application.rbに記述を追加

config/application.rb
config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]

1行目だけでも機能する場合もありますが、しない時もあるらしく、
2行目は必要に応じて記述してください。

以上で、日本語化は完了。

【参考】
[Rails5] deviseの日本語化について(devise.ja.ymlを入れても効かないとき)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?