ユーザーマイページを作ったらdeviseのユーザー編集機能がおかしくなった

# 概要
deviseを使ってユーザー管理機能を実装していたアプリで、マイページを作ったら編集ページが表示されなくなった。

#### 環境
Rails 6.0.0
Ruby 2.6.5

## 原因
ルーティングの表示の順番が原因で、ユーザー編集ページが意図通り表示されていなかった。
マイページのURIは`users/(user.id)`で、編集ページは`users/edit`の設定。

paramsを確認したところ `"id"=>"edit"`と記載があり、
なぜかeditをuser.idと勘違いしてマイページを表示しようとしていたのが原因の様子。

```:エラー文
ActiveRecord::RecordNotFound in UsersController#show
Couldn't find User with 'id'=edit
```

### ルーティングはこんな感じ

```ruby:routes.rb
Rails.application.routes.draw do
  resources :users, only: :show
  devise_for :users, controllers: {
    registrations: 'users/registrations'
  }
end
```

```:関係する部分だけ

                                 user GET    /users/:id(.:format)                                                                     users#show
                     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)                                                                  users/registrations#cancel
                new_user_registration GET    /users/sign_up(.:format)                                                                 users/registrations#new
               edit_user_registration GET    /users/edit(.:format)                                                                    users/registrations#edit
                    user_registration PATCH  /users(.:format)                                                                         users/registrations#update
                                      PUT    /users(.:format)                                                                         users/registrations#update
                                      DELETE /users(.:format)                                                                         users/registrations#destroy
                                      POST   /users(.:format)                                                                         users/registrations#create
```

## 解決策
ルーティングの記述する順番を変更した。
編集ページが優先されるように`devise_for :users, controllers: {registrations: 'users/registrations'}`の下に`resources :users, only: :show`を記載すればよかっただけ。

```ruby:routes.rb
Rails.application.routes.draw do
  devise_for :users, controllers: {
    registrations: 'users/registrations'
  }
  resources :users, only: :show # devise_forの下に記述するように変更
end
```
```
                     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)                                                                  users/registrations#cancel
                new_user_registration GET    /users/sign_up(.:format)                                                                 users/registrations#new
# 編集ページが優先される
               edit_user_registration GET    /users/edit(.:format)                                                                    users/registrations#edit
                    user_registration PATCH  /users(.:format)                                                                         users/registrations#update
                                      PUT    /users(.:format)                                                                         users/registrations#update
                                      DELETE /users(.:format)                                                                         users/registrations#destroy
                                      POST   /users(.:format)                                                                         users/registrations#create
# マイページはここに記載
                                 user GET    /users/:id(.:format)                                                                     users#show
```

### まとめ
ルーティングに限らず、プログラムの処理は上から実行されるのでそれを意識して実装を行った方が良い。
しっかりルーティングのことを理解していれば大丈夫かと思うのですが、なかなか調べても記事がなかったので書かせていただきました。

## 参考

[【Rails】ルーティングは上から順に処理されるよという話](https://qiita.com/bSRATulen2N90kL/items/a9437a703298b69e75fc)