【Rails】deviseを使用してroutes.rbでresources :usersするときは順番に気をつける

#事象

`rails g devise User` を実装して、users controllerには`before_action :authenticate_user!`してある。

```users_controller.rb
class UsersController < ApplicationController
  before_action :authenticate_user!
  def index
  end

  def show
  end
end
```

```routes.rb
Rails.application.routes.draw do
  root 'home#index'
  resources :users
  devise_for :users
end
```
rootが`Home#index`で、ここからログイン、新規アカウント作成へリンクしている。

<img width="409" alt="スクリーンショット 2019-03-19 18.51.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/251648/519f4ea2-98d0-bb05-bb14-96d595f32995.png">

しかし、 `ログイン`をクリックするとログインページへは移動せずに「このページは動作していません」となってしまった。

<img width="652" alt="スクリーンショット 2019-03-19 18.51.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/251648/d9d3f76b-8f38-a0e1-a9b6-0e4766d10766.png">


# 原因と解決方法


ログを見ると `Parameters: {"id"=>"sign_in"}` となっていて、Completed 401 Unauthorized が返っているのがわかる。

```
Started GET "/users/sign_in" for 127.0.0.1 at 2019-03-20 00:42:44 +0900
Processing by UsersController#show as HTML
  Parameters: {"id"=>"sign_in"}
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)
```
　

`rails routes` を見てみると。

```
$ rails routes
                   Prefix Verb   URI Pattern                                                                              Controller#Action
                     root GET    /                                                                                        home#index
                    users GET    /users(.:format)                                                                         users#index
                          POST   /users(.:format)                                                                         users#create
                 new_user GET    /users/new(.:format)                                                                     users#new
                edit_user GET    /users/:id/edit(.:format)                                                                users#edit
                     user GET    /users/:id(.:format)                                                                     users#show
                          PATCH  /users/:id(.:format)                                                                     users#update
                          PUT    /users/:id(.:format)                                                                     users#update
                          DELETE /users/:id(.:format)                                                                     users#destroy
         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
```

となっており、

`/users/:id(.:format)` 
が
`/users/sign_in(.:format)`
より上位(優先度が上)にいるのが原因だった。

なのでroutes.rbを

```routes.rb
Rails.application.routes.draw do
  root 'home#index'
  devise_for :users
  resources :users
end

```

にすれば無事ログイン画面へ遷移できた。
(`devise_for :users` を上、`resources :users`を下にした)


<img width="364" alt="スクリーンショット 2019-03-20 1.02.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/251648/eaf499a4-6c4a-8cbb-b79f-0ae0fafbb4ab.png">
（例のログイン画面）