[RAILS] Lorsque j'ai créé un utilisateur sur ma page, la fonction d'édition utilisateur de devise est devenue étrange.

Aperçu

Dans une application qui utilisait la conception pour implémenter des fonctions de gestion des utilisateurs, la page d'édition a disparu lorsque j'ai créé Ma page.

environnement

Rails 6.0.0 Ruby 2.6.5

Cause

La page de modification de l'utilisateur n'a pas été affichée comme prévu en raison de l'ordre dans lequel les itinéraires étaient affichés. L'URI de Ma page est ʻusers / (user.id) et la page d'édition est définie sur ʻusers / edit.

Quand j'ai vérifié les paramètres, il a dit " id "=>" edit ", Il semble que la cause était que j'essayais d'afficher ma page en interprétant mal modifier comme user.id pour une raison quelconque.

Déclaration d'erreur


ActiveRecord::RecordNotFound in UsersController#show
Couldn't find User with 'id'=edit

Le routage ressemble à ceci

routes.rb


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

Seule la partie pertinente



                                 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

Solution

Changement de l'ordre de routage. Tout ce que j'avais à faire était de mettre resources: users, only :: show sous devise_for: users, controllers: {registrations: 'users / registrations'} pour que la page d'édition soit prioritaire.

routes.rb


Rails.application.routes.draw do
  devise_for :users, controllers: {
    registrations: 'users/registrations'
  }
  resources :users, only: :show # devise_Modifié pour être décrit sous pour
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
#Modifier la page a priorité
               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
#Ma page est répertoriée ici
                                 user GET    /users/:id(.:format)                                                                     users#show

Sommaire

Non limité au routage, le traitement du programme est exécuté par le haut, il est donc préférable de l'implémenter dans cet esprit. Je pense que ce n'est pas grave si vous avez une solide compréhension du routage, mais je n'ai pas trouvé d'article même après avoir cherché, alors je l'ai écrit.

référence

[Rails] L'histoire selon laquelle le routage est traité dans l'ordre du haut

Recommended Posts

Lorsque j'ai créé un utilisateur sur ma page, la fonction d'édition utilisateur de devise est devenue étrange.
Cas où les utilisateurs sont déconnectés lors de la modification d'une application (rails)
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (2)
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (1)
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (3)
Ce que j'ai essayé quand je voulais obtenir tous les champs d'un haricot
J'ai réussi à obtenir un blanc lorsque j'ai apporté le contenu de Beans dans la zone de texte
Lors de la création de la première page, j'étais coincé avec la gestion des images (super débutant)
J'ai essayé d'utiliser la fonction Server Push de Servlet 4.0
[Java] Lors de l'écriture du source ... Mémorandum ①
J'ai écrit un diagramme de séquence de l'exemple j.u.c.Flow
Je souhaite ajouter une fonction de suppression à la fonction de commentaire
Lorsque je suis passé à IntelliJ, il y avait une grande différence dans l'encodage du fichier de propriétés.
J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 4): une fonction qui rend l'utilisateur unique