MENU

【Rails】deviseを使用して管理者と会員を作成する方法(初心者向け)

今回は、アカウント管理を行える「devise」を使って、「管理者」と「会員」を作成して管理します。

今回は、「管理者(admin)」「会員(customer)」という名前で作成してみます。


目次

1. 「devise」のインストール

まず、「devise」を「Gemfile」に追加して、インストールします。

gem 'devise'
bundle install

ここまでは問題ありませんね。


2.インストールコマンドとconfigファイルの修正

以下のコマンドを実行します。

$ rails g devise:install

「/config/initializers/devise.rb」の中を見るとコメント行になっている「#config.scoped_views = false」という部分があるので、ここをコメントを外して「true」に変更します。

# config.scoped_views = false
# 元々の状態
config.scoped_views = true
# これでオッケー!

変更できれば次に進みます。


3.adminモデルとcustomerモデルを作成

モデルを作成します。

$ rails g devise admin
$ rails g devise customer

※作成したら、必ずすぐに「マイグレーション」をしましょう!
マイグレーションを忘れると、一通りの作業が終わった後に正常に動作しないことがあります。
私はこれで一度ハマりました…。笑

rails db:migrate

これでOKですね。
万が一、ミスったときの対処法はこちらをみてください!

【Rails】deviseインストールしてエラーになったら


4.adminsコントローラとcustomersコントローラを作成

続いて、コントローラも作成します。

$ rails g devise:controllers admins
$ rails g devise:controllers customers

5.Viewの作成

deviseのビューを作成します。コマンドは以下の通りです。

$ rails g devise:views admins
$ rails g devise:views customers

これで、ビューも作成できました。


6.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
                                :
                                :

これではまずいので、「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に分けることができました!

7.最後の処理

先にできてしまっていた、デフォルトのビューを削除します。
(新規に作った方は作業不要?だと思いますが、念のため!)

$ rails d devise:views

これで完了です!

全ての作業を完了することができました!

よかったらシェアしてね!

この記事を書いた人

目次
閉じる