[Devise]Deviseのroutingカスタマイズ方法ざっくりまとめた


開発案件でdeviseのルーティングをカスタマイズをする機会が多かったのでざっくりまとめてみました。

まずdevise導入時に以下コマンド入力してルーティング設定しますよね。

``` :ターミナル
rails g devise user
```
すると、以下のように自動でルーティングが設定されます。
これだけでdeviseルーティングが賄えるわけですが、カスタマイズしたい場合それの記述方法があります。

``` rb
Rails.application.routes.draw do
devise_for :users
```

```
         new_user_session GET    /users/sign_in(.:format)         devise/sessions#new
             user_session POST   /users/sign_in(.:format)         devise/sessions#create
     destroy_user_session DELETE /users/sign_out(.:format)        devise/sessions#destroy
        new_user_password GET    /users/password/new(.:format)    devise/passwords#new
       edit_user_password GET    /users/password/edit(.:format)   devise/passwords#edit
            user_password PATCH  /users/password(.:format)        devise/passwords#update
                          PUT    /users/password(.:format)        devise/passwords#update
                          POST   /users/password(.:format)        devise/passwords#create
 cancel_user_registration GET    /users/cancel(.:format)          devise/registrations#cancel
    new_user_registration GET    /users/sign_up(.:format)         devise/registrations#new
   edit_user_registration GET    /users/edit(.:format)            devise/registrations#edit
        user_registration PATCH  /users(.:format)                 devise/registrations#update
                          PUT    /users(.:format)                 devise/registrations#update
                          DELETE /users(.:format)                 devise/registrations#destroy
                          POST   /users(.:format)                 devise/registrations#create
```

## Routingカスタマイズ方法

#### usersコントローラーを使いルーティングをuserに変更したい場合

``` rb
  devise_for :users, controllers: {
    registrations: 'users/registrations',
    sessions: "users/sessions",
    passwords: "users/passwords"
  }
```

```
          new_user_session GET      /users/sign_in(.:format)        users/sessions#new
                                    ...(略)
         new_user_password GET      /users/password/new(.:format)   users/passwords#new
                                    ...(略)
  cancel_user_registration GET      /users/cancel(.:format)         users/registrations#cancel
                                    ...(略)
```

#### devise_forに加えて、devise_scope で自由にカスタマイズする
registrationsだけカスタマイズしたい場合、devise_forでskipを使う。
※skipすると、7つのルーティングは自分で生成する必要があるので、
　お好みで設定する == パスやアクションを自由に変更できる。

``` rb
  devise_for :users, skip: :registrations, controllers: {
    sessions: 'users/sessions'
    passwords: 'users/passwords'
  }
  devise_scope :user do
　　# registrationsのカスタマイズしたいルーティングを記述
  end
```

#### 基本カスタム例
/users/sign_up→/signup

``` rb
  devise_scope :user do
    get '/signup', to: 'users/registrations#new'
    post '/signup', to: 'users/registrations#create'
  end
```

```
  signup GET    /signup(.:format)   users/registrations#new
         POST   /signup(.:format)   users/registrations#create
```

#### prefixを変更したくない場合as:を使い、元々のprefixを記載。

``` rb
  devise_scope :user do
    get '/signup', to: 'users/registrations#new', as: :new_user_registration
    post '/signup', to: 'users/registrations#create', as: :user_registration
  end
```

```
  new_user_registration GET    /signup(.:format)    users/registrations#new
      user_registration POST   /signup(.:format)    users/registrations#create
```

#### passwordは元のまま、追加で他もカスタマイズしたいような場合
skip: [　]括弧で括り追加します。

``` rb
  devise_for :users, skip: [:registrations, :sessions], controllers: {
    passwords: 'users/passwords'
  }
  devise_scope :user do
　　# sessionsのカスタマイズしたいルーティングを記述
　　# registrationsのカスタマイズしたいルーティングを記述
  end
```

以上です。

**参考にした記事**
https://qiita.com/mmmasuke/items/240c1cc14543d1e1c33e


どなたかのお役に立てれば幸いです。