見出し画像

deviceを使用して、adminモデルを追加する流れを分かりやすく解説

railsチュートリアルでは、userモデルにadminカラムを追加してユーザーtypeを分けて実装していました。しかし、adminユーザーは通常userと必要な機能が異なる事から、モデルで分けた方が管理しやすく、コードもスッキリします。そこでdeviseを用いたadminユーザーの作成方法を説明します。

●実装方法
まず、deviseでadminモデルを作成します。

$ rails g devise admin

今回、adminユーザーはseed.rbで作成するので、会員登録機能は不要です。なので、adminモデルからregisterabeをコメントアウトします。

model/admin.rb
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も作成すると思うので、一工夫加え、ルーティングをわかりやすくします。

config/routes.rb
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を利用し作成します。

db/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を用いる事で、重複登録を防ぐ。

後は自分の好きなように管理ユーザーの機能を作成が出来ます。

この記事が参加している募集

noteの書き方

この記事が気に入ったらサポートをしてみませんか?