Rails6でgemのcancancanを導入済みの前提です。
権限が無いページのアクセスや権限が無いページへのURLを直接入力したときに、Railsのエラー画面では無く「権限がありません」とエラーメッセージを表示させてトップページにリダイレクトさせる方法です。
トップページにリダイレクトさせる
app/controllers/application_controller.rb
に以下を追加するだけです。
rescue_from CanCan::AccessDenied do |exception|
redirect_to root_path, :alert => exception.message
end
これで完了です。
下記に実際のエラー画面の画像を載せておきます。
エラーメッセージの日本語化
エラーメッセージの日本語化するには、rails-i18nというgemを使用します。Gemfileに以下の一文を追加して、bundle install
をします。
gem 'rails-i18n'
次に、config/application.rb
に以下を追記します。これにより、サーバ再起動後にエラーメッセージが日本語化されていると思います。
require_relative "boot"
require "rails/all"
Bundler.require(*Rails.groups)
module 〇〇
class Application < Rails::Application
config.load_defaults 6.1
config.time_zone = 'Tokyo'
config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.yml').to_s]
end
end
modelの属性名については英語のままになっているので、以下のファイルを作成し、追加。
config/locales/ja.yml
ja:
unauthorized:
manage:
all: アクセス権限がありません
activerecord:
models:
user: ユーザー
attributes:
user:
name: 名前
email: メールアドレス
password: パスワード
これで、日本語化の完了です。