In einer App, die Geräte zum Implementieren von Benutzerverwaltungsfunktionen verwendet hat, ist die Bearbeitungsseite beim Erstellen meiner Seite verschwunden.
Rails 6.0.0 Ruby 2.6.5
Die Benutzerbearbeitungsseite wurde aufgrund der Reihenfolge, in der die Routen angezeigt wurden, nicht wie beabsichtigt angezeigt. Der URI von "Meine Seite" lautet "users / (user.id)", und die Bearbeitungsseite ist auf "users / edit" festgelegt.
Als ich die Parameter überprüfte, stand dort "id" => "edit". Es scheint, dass die Ursache darin bestand, dass ich aus irgendeinem Grund versucht habe, meine Seite anzuzeigen, indem ich edit als user.id missverstanden habe.
Fehleranweisung
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
Nur der relevante Teil
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
Die Reihenfolge des Routings wurde geändert. Alles was ich tun musste, war "resources: users, only :: show" unter "devise_for: users, controller: {registrations: 'users / registrations'}" zu setzen, damit die Bearbeitungsseite Vorrang hat.
routes.rb
Rails.application.routes.draw do
devise_for :users, controllers: {
registrations: 'users/registrations'
}
resources :users, only: :show # devise_Geändert, um unter für beschrieben zu werden
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
#Seite bearbeiten hat Vorrang
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
#Meine Seite ist hier aufgelistet
user GET /users/:id(.:format) users#show
Die Programmverarbeitung ist nicht auf das Routing beschränkt, sondern wird von oben ausgeführt. Daher ist es besser, dies zu implementieren. Ich denke, es ist in Ordnung, wenn ich das Routing gut verstehe, aber ich habe es geschrieben, weil es keinen Artikel gab, auch wenn ich ihn nachgeschlagen habe.
[Rails] Routing wird von oben nach unten verarbeitet
Recommended Posts