今回は、アカウント管理を行える「devise」を使って、「管理者」と「会員」を作成する方法をまとめてみました。
分かりやすくするため、「管理者(admin)」「会員(customer)」という名前で作成してみます。
「devise」のインストール
まず、「devise」を「Gemfile」に追加して、インストールします。
gem 'devise'
bundle install
インストールコマンドとconfigファイルの修正
以下のコマンドを実行します。
$ rails g devise:install
「/config/initializers/devise.rb」の中を見ると、
コメント行になっている「#config.scoped_views = false」という部分があるので、コメントを外して「true」に変更します。
# config.scoped_views = false
# 元々の状態
config.scoped_views = true
# これでオッケー!
変更できれば次に進みます。
「adminモデル」と「customerモデル」を作成
モデルを作成します。
$ rails g devise admin
$ rails g devise customer
※作成したら、必ずすぐに「マイグレーション」をしましょう!
マイグレーションを忘れると、一通りの作業が終わった後に正常に動作しないことがあります。
私はこれで一度ハマりました…。笑
rails db:migrate
これでOKですね。
万が一、ミスったときの対処法はこちらをみてください!
「adminsコントローラ」と「customersコントローラ」を作成
続いて、コントローラも作成します。
コマンドは以下の通り。
$ rails g devise:controllers admins
$ rails g devise:controllers customers
「View」の作成
deviseのビューを作成します。
コマンドは以下の通りです。
$ rails g devise:views admins
$ rails g devise:views customers
「Routing」の作成
ルーティングを書いていきます。
現状のルーティングを確認すると以下のようになっています。
devise_for :users
devise_for :admins
一見、問題なさそうですが、「rails routes」してみると、、、
Prefix Verb URI Pattern Controller#Action
:
cancel_admin_registration GET /admins/cancel(.:format) devise/registrations#cancel
admin_registration POST /admins(.:format) devise/registrations#create
new_admin_registration GET /admins/sign_up(.:format) devise/registrations#new
edit_admin_registration GET /admins/edit(.:format) devise/registrations#edit
:
:
cancel_user_registration GET /customers/cancel(.:format) devise/registrations#cancel
user_registration POST /customers(.:format) devise/registrations#create
new_user_registration GET /customers/sign_up(.:format) devise/registrations#new
edit_user_registration GET /customers/edit(.:format) devise/registrations#edit
:
:
一番右の「Controller#Action」の項目が丸かぶりなのが分かります。
これではまずいので、「routes.rb」を書き換えて…
devise_for :admins, controllers: {
sessions: 'admins/sessions',
passwords: 'admins/passwords',
registrations: 'admins/registrations'
}
devise_for :customers, controllers: {
sessions: 'customers/sessions',
passwords: 'customers/passwords',
registrations: 'customers/registrations'
}
これでOKですね。
もう一度、「rails routes」してみると…。
Prefix Verb URI Pattern Controller#Action
:
cancel_admin_registration GET /admins/cancel(.:format) admins/registrations#cancel
admin_registration POST /admins(.:format) admins/registrations#create
new_admin_registration GET /admins/sign_up(.:format) admins/registrations#new
edit_admin_registration GET /admins/edit(.:format) admins/registrations#edit
:
:
cancel_user_registration GET /customers/cancel(.:format) customers/registrations#cancel
user_registration POST /customers(.:format) customers/registrations#create
new_user_registration GET /customers/sign_up(.:format) customers/registrations#new
edit_user_registration GET /customers/edit(.:format) customers/registrations#edit
:
:
ちゃんとadminsとcustomersに分けることができました!
最後の処理
先にできてしまっていた、デフォルトのビューを削除します。
(新規に作った方は作業不要?だと思いますが、念のため!)
$ rails d devise:views
これで完了です!
全ての作業を完了することができました!