#はじめに
「ユーザーと業者」、「管理者とユーザー」、「先生と生徒」など、登録情報が2つ以上(複数)必要な場合、deviseも同様に2つ以上(複数)必要です。
2つの(複数)deviseの導入方法を紹介します。
###目次
- deviseのインストール
- モデルを作成
- ルーティングの設定
- コントローラーの作成
##開発環境
ruby 2.6.5
rails 6.0.0
devise 4.7.3
#実装
それでは実装していきます〜
#1. deviseのインストール
deviseのgemを導入します。
# 中略
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がインストールされました。
次に以下の二行をコメントインして変更します。
# ==> 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
不要部分をコメントアウトします。
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
した時かぶって見にくいので再設定します。
deviseがずらっと並んでみにくい、、、、
下記に編集します。
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に変更しないといけないなど、色々とエラーが出ました。
もし見難くても大丈夫であれば、デフォルトを使うこともおすすめします。
#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_in
とlocalhost:3000/admins/sign_in
のそれぞれページが表示されることを確認できたら完成です!!
#まとめ
2deviseの導入方法でした。
###最後に
私はプログラミング初学者ですが、自分と同じ様にエンジニアを目指す方々の助けになればと思い、記事を投稿しております。
それではまた次回お会いしましょう〜
#参考
https://qiita.com/Yama-to/items/54ab4ce08e126ef7dade
https://ccbaxy.xyz/blog/2020/03/20/ruby33/