- 更新日: 2014年6月25日
- Rails
RailsAdminでRails管理画面を作成
ActiveAdmin と並んで人気の、Rails 管理画面用 gem である RailsAdmin を使ってみました。Github のスターなどを見る限り、どちらも同じくらい人気なようです。
RailsAdmin は Devise に依存しているので、Devise は導入済みの前提とします。Devise インストールの詳細に関しては以下を参照。
Rails4 にて Devise でユーザー登録・ログイン認証・認可の機能を追加 | EasyRamble
— 環境 —
rails 4.1
devise 3.2.2
rails_admin 0.6.2
AdminUser モデルを Devise の generator で生成
試してみましたところ、色々と RailsAdmin が自動で面倒見てくれるはずのところが上手く動作しませんでした。なので、まず先に管理者用ユーザーのモデルを Devise の generator で作成しておきます。AdminUser モデルとしました。
1 2 3 4 5 6 7 8 9 10 |
$ bundle exec rails generate devise AdminUser invoke active_record create db/migrate/20140625031634_devise_create_admin_users create app/models/admin_user.rb invoke rspec create spec/models/admin_user_spec.rb insert app/models/admin_user.rb route devise_for :admin_users |
管理者ユーザーはフォームからは登録させずに、コンソールから直接作成するため、registerable, recoverable の Devise モジュールを無効にします。AdminUser モデルから :registerable, :recoverable を削除。
app/models/admin_user.rb
1 2 3 4 5 6 |
class AdminUser < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable # :registerable, :recoverable, devise :database_authenticatable, :rememberable, :trackable, :validatable end |
マイグレーションファイルに拡張子 .rb が付いていなかったので、リネーム。
1 2 3 |
$ mv db/migrate/***_devise_create_admin_users db/migrate/***_devise_create_admin_users.rb |
マイグレーションファイルの Recoverable の箇所をコメントアウト。最後のほうの reset_password_token の add_index もコメントアウト。
db/migrate/***_devise_create_admin_users.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class DeviseCreateAdminUsers < ActiveRecord::Migration def change create_table(:admin_users) do |t| ## Database authenticatable t.string :email, :null => false, :default => "" t.string :encrypted_password, :null => false, :default => "" ## Recoverable # t.string :reset_password_token # t.datetime :reset_password_sent_at # ... t.timestamps end add_index :admin_users, :email, :unique => true # add_index :admin_users, :reset_password_token, :unique => true # add_index :admin_users, :confirmation_token, :unique => true # add_index :admin_users, :unlock_token, :unique => true end end |
以上の設定が完了したら、マイグレーション実行です。
1 2 3 |
$ bundle exec rake db:migrate |
これで、管理者ユーザーのモデル(AdminUser)のDBテーブル(admin_usersテーブル)が作成されました。
RailsAdmin のインストール
続いて、本題の RailsAdmin のインストール。Gemfile に追加して bundle install。
Gemfile
1 |
gem 'rails_admin' |
1 2 3 |
$ bundle install |
続いて rails_admin をインストール。ルーティングを聞かれるので入力する。admin のままでOKならそのまま。
1 2 3 4 5 6 |
$ bundle exec rails generate rails_admin:install ? Where do you want to mount rails_admin? Press <enter> for [admin] > route mount RailsAdmin::Engine => '/admin', as: 'rails_admin' create config/initializers/rails_admin.rb |
RailsAdmin の設定
生成された rails_admin 用の initializers のファイルを編集し、Devise との連携を設定します。
config/initializers/rails_admin.rb
1 2 3 4 5 6 7 8 9 10 11 12 |
RailsAdmin.config do |config| ### Popular gems integration ## == Devise == config.authenticate_with do warden.authenticate! scope: :admin_user end config.current_user_method(&:current_admin_user) # ... end |
user → admin_user, current_user → current_admin_user に変更。
routing の設定。devise_for :admin_users の行が、mount RailsAdmin::Engine の行より上に来るようにします。
config/routes.rb
1 2 3 4 |
RailsApp::Application.routes.draw do root 'home#index' devise_for :admin_users mount RailsAdmin::Engine => '/admin', as: 'rails_admin' |
webrick 再起動。
1 2 3 |
$ bundle exec rails s |
管理者ユーザーを作成しログイン
コンソールから管理者ユーザーを作成します。
1 2 3 4 |
$ bundle exec rails c pry(main)> AdminUser.create!(:email => 'admin@example.com', :password => 'password', :password_confirmation => 'password') |
ブラウザから http://localhost:3000/admin にアクセスすると、http://localhost:3000/admin_users/sign_in にリダイレクトされるので、作成した管理者ユーザーのアカウントでログイン。
ログイン後、http://localhost:3000/admin/dashboard にてダッシュボードを確認できます。
will_paginate との conflict 解消、翻訳ファイルの設定など
will_paginate を使っている場合、以下のエラーが発生します。
1 2 3 |
undefined method `per' for #<User::ActiveRecord_Relation:****> |
https://github.com/sferik/rails_admin/wiki/Troubleshoot
これは、will_paginate と rails_admin が依存している kaminari が conflict するのが原因です。その解消のために以下を作成。
config/initializers/kaminari.rb
1 2 3 |
Kaminari.configure do |config| config.page_method_name = :per_page_kaminari end |
RailsAdmin の日本語化には、以下の翻訳ファイルを活用します。ありがたい。
config/locales 以下に日本語翻訳ファイルを設置。
webrick 再起動後に動作確認。active_admin よりはちょっと面倒でしたが、一応これで rails_admin も導入に成功しました。
シンプルで無駄な装飾のない active_admin も良いですが、UI は rails_admin のほうが綺麗な感じです。どっち使おうかな…シンプルなほうが好みですので、おそらく active_admin を使うことになりそうです。
- – 参考リンク –
- https://github.com/sferik/rails_admin
- Rails4にrails_adminを導入して綺麗な管理画面が出来るまで – tagamidaiki.com
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
Leave Your Message!