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

#はじめに
「ユーザーと業者」、「管理者とユーザー」、「先生と生徒」など、登録情報が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がインストールされました。



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

```ruby: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つのモデルを作成します。

```
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769854/d908e433-1fee-564b-695a-d944c8768936.png)
deviseがずらっと並んでみにくい、、、、
下記に編集します。

```ruby: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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/769854/bddb729e-a651-d3bf-f20d-49bad3b4cfcc.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_in`と`localhost:3000/admins/sign_in`のそれぞれページが表示されることを確認できたら完成です！！


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

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



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