Rails4でActiveAdminとdeviseとcancancanをつかって管理者ページを作る

環境

  • Rails 4.1.2
  • ruby 2.1.1
  • devise 3.3.0
  • active_admin 1.0.0 pre
  • cancancan 1.9.2

Gemfile

gem 'rails', '4.1.2'
gem 'cancancan'
gem 'devise'
gem 'activeadmin', github: 'activeadmin'

bundleする

$ bundle install

まずはdeviseでモデルを作る. roleでadminかどうかを判定するのでUserコントローラに追加

$ rails generate devise:install
$ rails generate devise User
$ rails generate migration add_role_to_users role:integer
$ rake db:migrate

Deviseのモデルを使うのでActiveAdminでUserモデルをつくらないようにするために--skip-users

$ rails generate active_admin:install --skip-users
 create  config/initializers/active_admin.rb
      create  app/admin
      create  app/admin/dashboard.rb
       route  ActiveAdmin.routes(self)
    generate  active_admin:assets
      create  app/assets/javascripts/active_admin.js.coffee
      create  app/assets/stylesheets/active_admin.css.scss
      create  db/migrate/20140829091410_create_active_admin_comments.rb
$ rake db:migrate

これするとconfig/intializers/active_admin.rbのなかを幾つか変えないといけない

config.current_user_method = :current_admin_user
↓
config.current_user_method = :current_user

config.logout_link_path = :destroy_admin_user_session_path
↓
config.logout_link_path = :destroy_user_session_path

またapp/application_controller.rbに以下を追加

def authenticate_admin_user!
  authenticate_user!
  unless current_user.admin?
    flash[:alert] = "This area is restricted to administrators only."
    redirect_to root_path
  end
end

userモデルはadmin?は持ってないので以下をmodel/user.rbに追加(Rails 4からenumが使える)

enum role: %(admin normal)

cancancanいらなかった!!!

roleが3つ以上あるといる気がするけどめんどくさそう

参考

Railsで新規にWebサービスを立ち上げる際にやったことまとめ [Rails] Devise and Active Admin Single User Model