Deviseで一般ユーザーと管理者を分ける。

Deviseを使い、一般ユーザーは管理者からしか作成できないようにする。

初めに、一般ユーザーと管理者ユーザーを分けるには

https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-role

にあるように2つの方法があるようだ。
ここでは、Option2の方法、すなわち、userモデルに、adminフィールドを追加し、そのbooleanで一般ユーザーか管理者かを分ける方法をとる。

Option2のとおりに

$ rails generate migration add_admin_to_users admin:boolean
$ rake db:migrate

とし、あとは、ページで管理者ならば

if current_user.try(:admin?)
# do something
end

と言うコードを追加する。

また、ビューをカスタマイズするには

Tools -> Run Rails Generatorで devise:viewsを選択し、「ok」
をクリックすると、app/viewss以下にdeviseディレクトリが作成され、
各メソッド用のviewがコピーされる。

ここで、models/user.rbの

devise :database_authenticatable, #:registerable,
:recoverable, :rememberable, #:trackable,
:validatable

でユーザー自身では登録を不可にするため、registerableをコメントアウトする。

次に、管理者からのみユーザーの登録をするには、別途
users_controller.rbを作成するが、ApplicationControllerではなく
下記のようにDevise::RegistrationControllerを継承するようにする。

class UsersController < Devise::RegistrationsController
  def custom_new
  end

  def index
  end

ここで、メソッド名は元々のDevise::RegistrrationControllerにあるものと被らないようにする。(例えばnewなどは被ってしまう)

ビューはapp/views/users以下に作る