[RAILS] Als ich einem Benutzer meine Seite erstellte, wurde die Benutzerbearbeitungsfunktion von devise seltsam.

Überblick

In einer App, die Geräte zum Implementieren von Benutzerverwaltungsfunktionen verwendet hat, ist die Bearbeitungsseite beim Erstellen meiner Seite verschwunden.

Umgebung

Rails 6.0.0 Ruby 2.6.5

Ursache

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

Das Routing sieht so aus

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

Lösung

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

Zusammenfassung

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.

Referenz

[Rails] Routing wird von oben nach unten verarbeitet

Recommended Posts

Als ich einem Benutzer meine Seite erstellte, wurde die Benutzerbearbeitungsfunktion von devise seltsam.
Fälle, in denen Benutzer beim Bearbeiten einer App abgemeldet sind (Rails)
Implementierung der Benutzerauthentifizierungsfunktion mit devise (2)
Implementierung der Benutzerauthentifizierungsfunktion mit devise (1)
Implementierung der Benutzerauthentifizierungsfunktion mit devise (3)
Was ich versucht habe, als ich alle Felder einer Bohne bekommen wollte
Ich habe es geschafft, ein Leerzeichen zu bekommen, als ich den Inhalt von Beans in den Textbereich gebracht habe
Bei der Erstellung der Top-Seite war ich mit dem Umgang mit Bildern beschäftigt (Super-Anfänger)
Ich habe versucht, die Server-Push-Funktion von Servlet 4.0 zu verwenden
[Java] Beim Schreiben der Quelle ... Memorandum ①
Ich habe ein Sequenzdiagramm des j.u.c.Flow-Beispiels geschrieben
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Als ich zu IntelliJ wechselte, gab es einen großen Unterschied in der Codierung der Eigenschaftendatei.
Ich habe eine Antwortfunktion für die Erweiterung Rails Tutorial (Teil 4) erstellt: Eine Funktion, die den Benutzer einzigartig macht