railsチュートリアルでは、userモデルにadminカラムを追加、し、ユーザーtypeを分けて実装していました。しかし、adminユーザーは通常userと必要な機能が異なる事から、モデルで分けた方が管理しやすく、コードもスッキリします。
そこでdeviseを用いたadminユーザーの作成方法を説明します。
#●実装方法
まず、deviseでadminモデルを作成します。
$ rails g devise admin
今回、adminユーザーはseed.rbで作成するので、会員登録機能は不要です。なので、adminモデルからregisterabeをコメントアウトします。
class Admin < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, #:registerable,
:recoverable, :rememberable, :validatable
end
そしてdeviseでuserも作成すると思うので、一工夫加え、ルーティングをわかりやすくします。
Rails.application.routes.draw do
devise_for :admins, controllers: {
sessions: "admins/sessions"
}
namespace :admins do
resources :users, only: %i(index destroy)
resources :questions, only: %i(index destroy)
end
devise_for :users, controllers: {
sessions: "users/sessions",
registrations: "users/registrations",
omniauth_callbacks: "users/omniauth_callbacks"
}
resources :questions
namespaseを使用し、urlを変更することにより、userとのルーティングをわかり区別することができます。
今回であれば、resouces :questionが被っていますが、namespase :adminを入れることにより
admin側: /admins/question/:id
user側: /question/:id
と、区別することが容易になります。
そして次はadminユーザーを作成します。今回はseed.rbを利用し作成します。
Admin.find_or_create_by(id: 1) do |admin|
admin.email = "example@example.com"
admin.password = "example"
end
こうして、rails db:seedとすることでadminユーザーを作成することができます。
作成できたかどうかは、rails c で確認すると良いでしょう。
ちなみにここで記載されているfind_or_create_by(id :1)というのは、id:1をまずfindする。なければcreateするという意味です。adminユーザーを重複して作成してしまうことを防ぐ事ができます。
#●まとめ
・adminユーザーは別モデルで管理すると良い
・namespaceを利用しルーティングを管理すると、userとの違いがわかりやすくなる
・db:seedを利用しadminユーザーを作成する。find_or_create_byを用いる事で、重複登録を防ぐ。
後は自分の好きなように管理ユーザーの機能を作成してください!以上です!