RailsAdminを導入して、前回作成した管理者ユーザー(管理者用のdeviseユーザーを作成)でログインした場合のみ表示されるようにします。
Rails6。管理画面をどれにしようか迷いましたが、一旦、一番お手軽なRailsAdminにしてみます。
RailsAdminインストール
Gemfileの最終行(deviseの後)に追加
# Use RailsAdmin gem 'rails_admin' gem 'rails_admin-i18n'
$ bundle install
$ rails g rails_admin:install
? Where do you want to mount rails_admin? Press for [admin] > admin
route mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
create config/initializers/rails_admin.rb
$ rails s -> http://localhost:3000/admin

認証追加
前回作成した管理者用のdeviseユーザーでログインした場合のみアクセスできるようにします。
config/initializers/rails_admin.rbの5行目辺りのを変更
## == Devise ==
# config.authenticate_with do
# warden.authenticate! scope: :user
# end
# config.current_user_method(&:current_user)
↓
## == Devise ==
config.authenticate_with do
warden.authenticate! scope: :admin_user
end
config.current_user_method(&:current_admin_user)
タイムゾーン変更
表示時間がズレてるので、タイムゾーンを日本(東京)に設定します。
config/application.rbの14行目辺り(class Applicationの中)に追加
config.time_zone = 'Tokyo'
翻訳追加
一部の文字が表示されないので、翻訳を追加します。
config/locales/ja.ymlの最終行に追加
datetime:
distance_in_words:
half_a_minute: "30秒前後"
less_than_x_seconds:
one: "1秒"
other: "%{count}秒"
x_seconds:
one: "1秒"
other: "%{count}秒"
less_than_x_minutes:
one: "1分"
other: "%{count}分"
x_minutes:
one: "約1分"
other: "%{count}分"
about_x_hours:
one: "約1時間"
other: "約%{count}時間"
x_days:
one: "1日"
other: "%{count}日"
about_x_months:
one: "約1ヶ月"
other: "約%{count}ヶ月"
x_months:
one: "1ヶ月"
other: "%{count}ヶ月"
almost_x_years:
one: "1年弱"
other: "%{count}年弱"
about_x_years:
one: "約1年"
other: "約%{count}年"
over_x_years:
one: "1年以上"
other: "%{count}年以上"
date:
formats:
default: "%Y/%m/%d"
short: "%m/%d"
long: "%Y年%m月%d日(%a)"
day_names: [日曜日, 月曜日, 火曜日, 水曜日, 木曜日, 金曜日, 土曜日]
abbr_day_names: [日, 月, 火, 水, 木, 金, 土]
month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]
order:
- :year
- :month
- :day
time:
formats:
default: "%Y/%m/%d %H:%M:%S"
short: "%y/%m/%d %H:%M"
long: "%Y年%m月%d日(%a) %H時%M分%S秒 %Z"
am: "午前"
pm: "午後"
config/locales/devise.ja.ymlの最終行に追加
admin_user: attributes: email: taken: "は既に使用されています。" blank: "が入力されていません。" too_short: "は%{count}文字以上に設定してください。" too_long: "は%{count}文字以下に設定してください。" invalid: "は有効でありません。" password: blank: "が入力されていません。" too_short: "は%{count}文字以上に設定してください。" too_long: "は%{count}文字以下に設定してください。" invalid: "は有効でありません。" password_confirmation: confirmation: "が%{attribute}と一致しません。" current_password: blank: "が入力されていません。" invalid: "が違います。"admin_user: attributes: email: taken: "既に使用されています。" blank: "入力してください。" too_short: "%{count}文字以上で入力してください。" too_long: "%{count}文字以下で入力してください。" invalid: "形式が正しくありません。" password: blank: "入力してください。" too_short: "%{count}文字以上で入力してください。" too_long: "%{count}文字以下で入力してください。" password_confirmation: confirmation: "%{attribute}と一致しません。" current_password: blank: "入力してください。" invalid: "違います。"
config/locales/devise.views.ja.ymlの10行目辺り(ja.activerecord.attributesの中)に追加
admin_user:
current_password: "現在のパスワード"
email: "メールアドレス"
password: "パスワード"
password_confirmation: "確認用パスワード"
remember_me: "ログインを記憶"
reset_password_sent_at: "パスワードリセット送信時刻"
remember_created_at: "ログイン記憶時刻"
created_at: "作成日"
updated_at: "更新日"
20行目辺り(上記の下)のを変更
models:
user: "ユーザ"
↓
models:
user: "ユーザー"
admin_user: "管理者"
※「ユーザ」か「ユーザー」かは好みかもしれないけど
$ rails s -> http://localhost:3000/admin

テスト追加
requestテストを使って、未ログインだと見れない、ログイン中なら見れる事のテストを追加します。
spec/requests/admin_spec.rbを作成
require 'rails_helper'
RSpec.describe 'Admin', type: :request do
let!(:admin_user) { create(:admin_user) }
describe 'GET /admin' do
context '未ログイン' do
it 'returns a 302 response' do
get '/admin'
expect(response).to have_http_status(302)
end
end
context 'ログイン中' do
before do
sign_in admin_user
end
it 'returns a 200 response' do
get '/admin'
expect(response).to have_http_status(200)
end
end
end
end
spec/rails_helper.rbの71行目辺りに追加
config.include Devise::Test::IntegrationHelpers, type: :request
spec/factories/admin_users.rbを作成
FactoryBot.define do
factory :admin_user do
pass = Faker::Internet.password(min_length: 8)
email { Faker::Internet.email }
password { pass }
password_confirmation { pass }
end
end
$ rspec 40 examples, 0 failures
【参考】ここまでのコミット内容
https://dev.azure.com/nightonly/rails-app-origin/_git/rails-app-origin/commit/1b5bfc1dbe4608605b264c93ae0b4d7f3c6b6b6e

“RailsアプリにサクッとRailsAdminを導入” に対して2件のコメントがあります。