Help us understand the problem. What is going on with this article?

-これからポートフォリオを作成する方へ- deviseを使用した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を用いる事で、重複登録を防ぐ。

後は自分の好きなように管理ユーザーの機能を作成してください!以上です!

d01masatooo11
現在、エンジニア転職を目指し学習・ポートフォリオ作成中です。 自身の経験を元に、同じく境遇の方や今後エンジニア転職を目指す方にとって有益な投稿ができればと思っています。 万が一誤りがあったり、より良い実装方法がありましたら、遠慮なくご指摘頂けますと幸いです!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした