Railsのdeviseを使用して複数のログイン画面を実装する方法

## deviseとは
Railsのgem(ライブラリ)の1つ。
ログイン機能の実装を簡単にしてくれるgemです。
これからdeviseを使用して複数のログイン画面を実装していきます。
## インストール・準備
Gemfileに追記

```rails:Gemfile
gem 'devise'
```

bundleまたはbundle install実行

```
$ bundle install
```

deviseを使用できるようにインストールします。

```
$ rails g devise:install
```

上記のコマンドを実行すると、ターミナルに下記の文字が表示されます。

```
===============================================================================

Depending on your application's configuration some manual setup may be required:

  1. Ensure you have defined default url options in your environments files. Here
     is an example of default_url_options appropriate for a development environment
     in config/environments/development.rb:

       config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

     In production, :host should be set to the actual host of your application.

     * Required for all applications. *

  2. Ensure you have defined root_url to *something* in your config/routes.rb.
     For example:

       root to: "home#index"
     
     * Not required for API-only Applications *

  3. Ensure you have flash messages in app/views/layouts/application.html.erb.
     For example:

       <p class="notice"><%= notice %></p>
       <p class="alert"><%= alert %></p>

     * Not required for API-only Applications *

  4. You can copy Devise views (for customization) to your app by running:

       rails g devise:views
       
     * Not required *

===============================================================================
```
では1から順に見ていきましょう！
config/environments/development.rbのendの上に記述してください。

```rails:config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
```

続いて2です。ルーティングを指定しましょう。

```rails:config/routes.rb
root to: "home#index"
```

続いて3です。こちらはログインした時にお知らせをしてくれます。

```rails:app/views/layouts/application.html.erb
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
```

ここで一つ注意なのですが、複数のログイン画面を実装するときは4は実行しないようにしましょう。

## Modelを生成する
ここで2つのモデルを生成します。
モデルを生成するときは```$ rails g devise モデル名```です。

```
$ rails g devise A
$ rails g devise B
```

db/migrateに2つのファイルが生成されます。
設定を加えたい場合は今のうちに書き換えておきましょう。
そして ```$ rails db:migrate```　をお忘れなく！

## Controllerを生成する

```
$ rails g devise:controllers As(複数形）
$ rails g devise:controllers Bs(複数形）
```
複数形にするのをお忘れなく！

## 設定ファイルを変更する
config/initializers/development.rbを開いて下記を見つけ出す。Macの方はコマンド⌘ + Fで簡単に探せますよ！

```rails:config/initializers/devise.rb
# config.scoped_views = false
```

上記のコメントアウトを外して、falseをtrueに書き換えます。

```rails:config/initializers/devise.rb
config.scoped_views = true
```

こうすることで複数モデルを可能にするようです。

## Viewを生成する

```
rails g devise:views As(複数形)

rails g devise:views Bs(複数形)

```

## ルーティングを生成する
config/routes.rbを以下のように書き換えてください。

```rails:config/routes.rb
Rails.application.routes.draw do
  devise_for :B, controllers: {
                         sessions: "Bs/sessions",
                         passwords: "Bs/passwords",
                         registrations: "Bs/registrations",
                       }
  devise_for :As, controllers: {
                       sessions: "As/sessions",
                       passwords: "As/passwords",
                       registrations: "As/registrations",
                     }
  root to: "home#index"
end
```

## その他
それぞれの新規登録画面・ログイン画面を編集したい場合は、
[Aの新規登録画面]
app/views/As/registrations/new.html.rb
[Aのログイン画面]
app/views/As/sessions/new.html.rb
[Bの新規登録画面]
app/views/Bs/registrations/new.html.rb
[Bのログイン画面]
app/views/Bs/sessions/new.html.rb


```rails routes```でを見たらURLの指定もわかりやすいかと思います。


rails sでサーバーを起動して以下のようにURLを打ち込んで確認してください。
[Aの新規登録画面]
http://localhost:3000/As/sign_up
[Aのログイン画面]
http://localhost:3000/As/sign_in
[Bの新規登録画面]
http://localhost:3000/Bs/sign_up
[Bのログイン画面]
http://localhost:3000/Bs/sign_in

###　参照

https://qiita.com/4npei/items/9066afb75d6a2ad9c661
https://qiita.com/Densetsu/items/2dc6a010809ae70c079e