RailsAdminは、簡単に、キレイな、扱いやすい管理画面を提供してくれるRailsエンジンです。
リソース
インストール
RailsAdminは、管理画面にアクセスする管理者の管理にDeviseを利用しています。
その為、まずは、Deviseをインストールしておきましょう。
Gemfileに、deviseを追記します。
gem 'devise'
インストールします。
$ bundle install
$ rails g devise:install
create config/initializers/devise.rb
create config/locales/devise.en.yml
===============================================================================
Some setup you must do manually if you haven't yet:
1. Ensure you have defined default url options in your environments files. Here
is an example of default_url_options appropriate for a development environment
in config/environments/development.rb:
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
In production, :host should be set to the actual host of your application.
2. Ensure you have defined root_url to *something* in your config/routes.rb.
For example:
root :to => "home#index"
3. Ensure you have flash messages in app/views/layouts/application.html.erb.
For example:
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
4. If you are deploying Rails 3.1 on Heroku, you may want to set:
config.assets.initialize_on_precompile = false
On config/application.rb forcing your application to not access the DB
or load models when precompiling your assets.
===============================================================================
上記の警告メッセージの内、フラッシュメッセージの表示ロジックのみ、レイアウトファイルに追記します。
<!DOCTYPE html>
<html>
<head>
<title>SampleRailsAdmin</title>
<%= stylesheet_link_tag "application", :media => "all" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
<%= yield %>
</body>
</html>
本来であれば、RailsAdminをインストールする時に、関連する管理者モデルを自動生成してくれるはずなのですが、正常にジェネレーターが動作しないようなので、先にDeviseで管理者モデルを自動生成します。
$ rails g devise admin_user
invoke active_record
create db/migrate/20120802102400_devise_create_admin_users.rb
create app/models/admin_user.rb
insert app/models/admin_user.rb
route devise_for :admin_users
管理者は直接DBに登録するようにしたい為、管理者モデルファイルから:registerable
と:recoverable
の指定を外します。
class AdminUser < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
# attr_accessible :title, :body
end
同様に、マイグレーションファイルから関連するロジックをコメントアウトします。
class DeviseCreateAdminUsers < ActiveRecord::Migration
def change
create_table(:admin_users) do |t|
...
## Recoverable
# t.string :reset_password_token
# t.datetime :reset_password_sent_at
...
end
...
# add_index :admin_users, :reset_password_token, :unique => true
...
end
end
マイグレーションします。
$ rake db:migrate
さて、ここからRailsAdminのインストールです。
本来であれば、ここまで全てRailsAdminがお世話してくれるはずなんですけどね。
Gemfileに、rails_adminを追記します。
gem 'rails_admin'
インストールします。
途中で、管理者モデルとして何を使うかと聞いて来るのでadmin_user
を、管理画面をマウントするパスをどうするか聞いてくるのでadmin
と答えます。
$ bundle install
$ rails g rails_admin:install
- Hello, RailsAdmin installer will help you sets things up!
- I need to work with Devise, let's look at a few things first:
- Checking for a current installation of devise...
- Found it!
- Looks like you've already installed it, good!
- And you already set it up, good! We just need to know about your user model name...
- We found 'admin_user' (should be one of 'user', 'admin', etc.)
? Correct Devise model name if needed. Press <enter> for [admin_user] >
- Ok, Devise looks already set up with user model name 'admin_user':
- Now you'll need an initializer...
create config/initializers/rails_admin.rb
- Adding a migration...
create db/migrate/20120802103609_create_rails_admin_histories_table.rb
? Where do you want to mount rails_admin? Press <enter> for [admin] >
gsub config/routes.rb
route mount RailsAdmin::Engine => '/admin', :as => 'rails_admin'
RailsAdminが利用する履歴モデルのマイグレーションファイルが自動生成されているので、もう一度、マイグレーションします。
$ rake db:migrate
利用方法
まず、管理者をDBに登録します。
$ rails c
Loading development environment (Rails 3.2.7)
1.9.3p194 :001 > AdminUser.create(:email => "admin@test.com", :password => "hogehoge", :password_confirmation => "hogehoge")
(0.1ms) begin transaction
AdminUser Exists (0.1ms) SELECT 1 AS one FROM "admin_users" WHERE "admin_users"."email" = 'admin@test.com' LIMIT 1
SQL (1.9ms) INSERT INTO "admin_users" ("created_at", "current_sign_in_at", "current_sign_in_ip", "email", "encrypted_password", "last_sign_in_at", "last_sign_in_ip", "remember_created_at", "reset_password_sent_at", "reset_password_token", "sign_in_count", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [["created_at", Thu, 02 Aug 2012 10:46:25 UTC +00:00], ["current_sign_in_at", nil], ["current_sign_in_ip", nil], ["email", "admin@test.com"], ["encrypted_password", "$2a$10$spWm6E8m2s8w7OVDfaQo0Ogn1K4EbpVNP7wD3nUF476Evdtf6fKtC"], ["last_sign_in_at", nil], ["last_sign_in_ip", nil], ["remember_created_at", nil], ["reset_password_sent_at", nil], ["reset_password_token", nil], ["sign_in_count", 0], ["updated_at", Thu, 02 Aug 2012 10:46:25 UTC +00:00]]
(0.8ms) commit transaction
=> #<AdminUser id: 1, email: "admin@test.com", encrypted_password: "$2a$10$spWm6E8m2s8w7OVDfaQo0Ogn1K4EbpVNP7wD3nUF476E...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: "2012-08-02 10:46:25", updated_at: "2012-08-02 10:46:25">
サーバーを起動して、http://localhost:3000/admin
にアクセスすると、ログイン画面が表示されます。
先程、登録した管理者のメルアドとパスワードを入力してログインすると、管理画面のダッシュボードが表示されます。
モデルは自動的にRailsAdminによって読み込まれる為、特に小難しい事さえしなければ、この状態でどんどん新しいモデルを管理出来るようになります。
使い勝手が知りたければ、公式にDemoが用意されているので、こちらで試してみるのも良いでしょう。