16
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】2つの(複数)deviseを導入

Last updated at Posted at 2020-11-22

#はじめに
「ユーザーと業者」、「管理者とユーザー」、「先生と生徒」など、登録情報が2つ以上(複数)必要な場合、deviseも同様に2つ以上(複数)必要です。
2つの(複数)deviseの導入方法を紹介します。

###目次

  1. deviseのインストール
  2. モデルを作成
  3. ルーティングの設定
  4. コントローラーの作成

##開発環境
ruby 2.6.5
rails 6.0.0
devise 4.7.3

#実装
それでは実装していきます〜

#1. deviseのインストール

deviseのgemを導入します。

Gemfile.
# 中略
gem 'devise'

記述したら、bundle installを実行しましょう。

ターミナル.
bundle install

Gemをインストールした後はrails sをcontrol + Cで一度停止し、サーバーを再起動する必要があります。

続いて、アプリケーション内でdeviseを使えるようにするため、下記のコマンドを実行します。

ターミナル.
rails g devise:install
ターミナル.
create  config/initializers/devise.rb
create  config/locales/devise.en.yml
.........#省略

deviseがインストールされました。

次に以下の二行をコメントインして変更します。

config/initializers/devise.rb
  # ==> Scopes configuration
  # Turn scoped views on. Before rendering "sessions/new", it will first check for
  # "users/sessions/new". It's turned off by default because it's slower if you
  # are using only default views.
  config.scoped_views = true  # ←複数のmodelで個別のログイン画面を使う。 これをtrueにします。
 

  # Configure the default scope given to Warden. By default it's the first
  # devise role declared in your routes (usually :user).
  # config.default_scope = :user

  # Set this configuration to false if you want /users/sign_out to sign out
  # only the current scope. By default, Devise signs out all scopes.
  config.sign_out_all_scopes = false  #複数のモデルを扱う際、いずれかがログアウトした時に全てログアウトする。 これをfalseにします。

#2. モデルを作成

deviseが2つなので当然2つのモデルを作成します。

rails g devise user
rails g devise admin

管理者アカウントになる admin に対して勝手に sign_up されたくない場合は Admin モデルを修正します。
そうでなければ、飛ばして下さい。

:registerable不要部分をコメントアウトします。

app/models/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

3. ルーティングの設定

deviseを導入するとデフォルトでルーティングを設定してくれてますが、rails routesした時かぶって見にくいので再設定します。
スクリーンショット 2020-11-17 14.02.33.png
deviseがずらっと並んでみにくい、、、、
下記に編集します。

routes.rb
Rails.application.routes.draw do
  devise_for :admins
  devise_for :users
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
#ここまでが自動生成されてます。

#下記に編集します。
  devise_for :admins, controllers: {
    sessions:      'admins/sessions',
    passwords:     'admins/passwords',
    registrations: 'admins/registrations'
  }
  devise_for :users, controllers: {
    sessions:      'users/sessions',
    passwords:     'users/passwords',
    registrations: 'users/registrations'
  }
  root to: 'home#index'
end

adminsとsuersに別れて見やすくなります。
※注意:サインアウトする時にHTTPメッソドをGETに変更しないといけないなど、色々とエラーが出ました。
もし見難くても大丈夫であれば、デフォルトを使うこともおすすめします。

スクリーンショット 2020-11-17 14.06.49.png

#4. コントローラーとビューの作成

コントローラーとビューも2つづつ作成します。
※コントローラーは特に編集する予定がなければ飛ばして下さい。

ターミナル.
rails g devise:views users
rails g devise:controllers users
ターミナル.
rails g devise:views admins
rails g devise:controllers admins

localhost:3000/users/sign_inlocalhost:3000/admins/sign_inのそれぞれページが表示されることを確認できたら完成です!!

#まとめ
2deviseの導入方法でした。

###最後に
私はプログラミング初学者ですが、自分と同じ様にエンジニアを目指す方々の助けになればと思い、記事を投稿しております。
それではまた次回お会いしましょう〜

#参考
https://qiita.com/Yama-to/items/54ab4ce08e126ef7dade
https://ccbaxy.xyz/blog/2020/03/20/ruby33/

16
22
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?