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.
Rails 6.0.0 Ruby 2.6.5
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
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
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
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.
[Rails] L'histoire selon laquelle le routage est traité dans l'ordre du haut
Recommended Posts