Rails4にrails_adminを導入して綺麗な管理画面が出来るまで


最近はRubyOnRailsをごりごりいじって色々やってます。
その中でrails_admin gemを導入する機会があったのですが、結構つまづいてしまったので記録として残しておこうと思います。

Rails – 4.1.0
Ruby – 2.1.0
rails_admin – 0.6.2
devise – 3.2.4

まずはGemfileに以下を追記します。

gem 'rails_admin'
gem 'devise'

rails_adminでは管理者ログインとしてDevise gemを使うことが出来ます。
その他にもSorceryやManuallyというgemも使えるようですが、自分はDevise gemしか使ったことないのでDeviseにします。

そしてインストールしてdeviseをインストールします。

$ bundle install
$ bundle exec rails g devise:install

色々出てきますが、フラッシュメッセージの部分だけ修正します。

app/views/layouts/application.html.erb

<!DOCTYPE html>
<html>
<head>
  <title>Cafe</title>
  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
  <%= csrf_meta_tags %>
</head>
<body>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>

<%= yield %>


</body>
</html>

追記した部分を色でつけておきました。

次はmodelを作ります。admin_user というmodelでも作りますか

$ rails g devise admin_user

管理者は直接DBにデータを入れたいため、:registerableと:recoverableを消しておきます。

app/models/admin_user.rb

class AdminUser < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable,
         # :registerable, :recoverable,
         :rememberable, :trackable, :validatable
end

generateしたときに生成されたマイグレーションファイルの中からもregisterableとrecoverableは外しておきます。

db/migrate/****_devise_create_admin_users.rb

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

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      t.integer  :sign_in_count, default: 0, null: false
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string   :current_sign_in_ip
      t.string   :last_sign_in_ip

      ## Confirmable
      # t.string   :confirmation_token
      # t.datetime :confirmed_at
      # t.datetime :confirmation_sent_at
      # t.string   :unconfirmed_email # Only if using reconfirmable

      ## Lockable
      # t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
      # t.string   :unlock_token # Only if unlock strategy is :email or :both
      # t.datetime :locked_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

ここまで出来たらマイグレーションしておきましょう。

$ bundle exec rake db:migrate

次はようやくrails_adminをがちゃがちゃします。インストールしましょう。そのときにどのパスで入れるようにするか聞かれるので今回は /admin_user でやってみたいと思います。

$ rails g rails_admin:install
           ?  Where do you want to mount rails_admin? Press  for [admin] > admin_user

でここからdeviseと連携させます。色々な記事では自動的に連携されてるっぽいのですが、僕の場合はそうはいかなかったので手動でやります。

config/initializers/rails_admin.rb

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)

  ## == Cancan ==
  # config.authorize_with :cancan

  ## == PaperTrail ==
  # config.audit_with :paper_trail, 'User', 'PaperTrail::Version' # PaperTrail >= 3.0.0

  ### More at https://github.com/sferik/rails_admin/wiki/Base-configuration

  config.actions do
    dashboard                     # mandatory
    index                         # mandatory
    new
    export
    bulk_delete
    show
    edit
    delete
    show_in_app

    ## With an audit adapter, you can add:
    # history_index
    # history_show
  end
end

ここで大切なのは今回、admin_userとして使用するため、シンボルを :admin_user に変更、9行目の部分も current_admin_user に変更しました。まだこういうとこ慣れてないって感じます・・・

んで次はrouteをちょっといじります。デフォルトの状態ではコンフリクトしてしまうので順番を上下逆にします。
4行目と5行目を逆にして devise_for が上にくるようにしましょう。

Rails.application.routes.draw do
  root 'home#index'

  devise_for :admin_user
  mount RailsAdmin::Engine => '/admin_user', as: 'rails_admin'

少し長かったですが、これで終わりです!あとはコンソールでユーザー作って実際にログインしてみましょう!

これで localhost:3000/admin_user にアクセス出来るのでアクセスしましょう!うまくいってればログイン画面に飛ばされ、ログインすると綺麗な画面が出てくるはずです!!

色々高機能らしいrails_admin、これから色々触ってみます!!

頑張って読んでます。面白い!

メタプログラミングRuby
Paolo Perrotta
アスキー・メディアワークス
売り上げランキング: 26,917

更新情報はFacebookページで!

ブログの更新、読んで役立つ他ブログの記事などを更新しています。




関連のある記事