LoginSignup
235
233

More than 5 years have passed since last update.

RailsAdmin | Railsで管理画面を自動生成

Posted at

RailsAdminは、簡単に、キレイな、扱いやすい管理画面を提供してくれるRailsエンジンです。
RailsAdmin

リソース

インストール

RailsAdminは、管理画面にアクセスする管理者の管理にDeviseを利用しています。
その為、まずは、Deviseをインストールしておきましょう。

Gemfileに、deviseを追記します。

Gemfile
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.

===============================================================================

上記の警告メッセージの内、フラッシュメッセージの表示ロジックのみ、レイアウトファイルに追記します。

app/views/layouts/application.html.erb
<!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の指定を外します。

app/models/admin_user.rb
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

同様に、マイグレーションファイルから関連するロジックをコメントアウトします。

db/migrate/20120802102400_devise_create_admin_users.rb
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を追記します。

Gemfile
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が用意されているので、こちらで試してみるのも良いでしょう。

あわせて読みたい

235
233
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
235
233