[Ruby on Rails] Wenn die ID-Erfassung des Parameters nicht gut lief

Ziel

ID-Informationen abrufen. Ich hoffe, es wird für das Lösungsverfahren hilfreich sein, wenn die parameterbezogenen Probleme nicht funktionieren.

Entwicklungsumgebung

ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina google chrome

Annahme

Diesmal bin ich also auf die Parameter-ID gestoßen Ich werde es als Memorandum schreiben.

Status

--Posting-Funktion wurde implementiert --Versuchen Sie, die Löschfunktion zu implementieren

Wir werden diese lösen.

Zweifel Controller

app/controllers/img_searchs_controller.rb


  def destroy
    # binding.pry
    @img_searchs = current_customer.img_searchs
    @img_search = @img_searchs.find_by(id: params[:id])
    unless @img_search
      redirect_to new_img_search_path
    end
    if @img_search.destroy
      redirect_to request.referer
    else
      render :new
    end
  end

Schreiben und überprüfen Sie binding.pry, @img_search = @ img_searchs.find_by (id: params [: id]) wird null. Die Beschreibung selbst scheint in Ordnung zu sein, aber ich kann die ID nicht weitergeben. Wenn ich Parameter überprüfe, ist id = 'new'. (* Ich werde es später erklären, aber wenn ich dies gut bestätigen könnte, wäre die Lösung schnell) → Es besteht die Möglichkeit, dass die Beschreibung der Ansicht falsch ist.

Zweifel sehen

app/views


<% @img_searchs.each do |img_search| %>

...

<%= link_to "Löschen", new_img_search_path(img_search), method: :delete %>
<% end %>

Die Variablen selbst stimmen in jeder Anweisung überein, sodass die Beschreibung keinen Fehler zu enthalten scheint. Als ich jedoch bisher die Zerstörungsmethode verwendet habe, img_search_path(img_search), method: :delete Da es so etwas nicht gab, fühlte es sich etwas seltsam an. → Überprüfen Sie das Routing.

Verdächtige Routen

config/routes.rb


resources :img_searchs, only: [:create, :destroy, :new]

Matching. .. .. Führen Sie für alle Fälle auch die folgenden Schritte aus.

Terminal


$ rails routes
new_img_search GET     /img_searchs/new(.:format)
                public/img_searchs#new
          DELETE  /img_searchs/:id(.:format) 
                        public/img_searchs#destroy

Immerhin ist es geeignet. .. .. Auch wenn ich die Ansicht erneut überprüfe, ist die Beschreibung selbst immer noch korrekt. Wenn Sie jedoch den Bildschirmcursor auf den Löschlink bewegen. .. .. (In Google Chrome wird die verknüpfte URL unten links angezeigt.)

3000/img_searchs/new.15



 Nicht in Form von / img_searchs /: id!
 Zu diesem Zeitpunkt hatte ich keine Ahnung, warum neu aufgenommen wurde.

 Ich dachte jedoch, dass das zuvor erwähnte Unbehagen behoben werden sollte.
 Obwohl es keine sehr saubere Beschreibung ist, habe ich beschlossen, das Routing neu zu schreiben.


#### **`config/routes.rb`**
```rb

resources :img_searchs, only: [:create, :new]
delete 'img_searchs/:id' => 'img_searchs#destroy'

Und wenn Sie es erneut ausführen

Terminal


$ rails routes
new_img_search GET     /img_searchs/new(.:format)
                public/img_searchs#new
          DELETE  /img_searchs/:id(.:format) 
                        public/img_searchs#destroy

Das Ergebnis war genau das gleiche. Also habe ich beschlossen, den Pfad mit as anzugeben.

config/routes.rb


resources :img_searchs, only: [:create, :new]
delete 'img_searchs/:id' => 'img_searchs#destroy', as: 'img_search'

Und wenn ich es erneut ausführe, tritt ein Fehler auf, wie unten gezeigt. Der Pfadname wurde bereits als Inhalt verwendet. Und das.

Terminal


$ rails routes
rails aborted!
ArgumentError: Invalid route name, already in use: 'img_search' 
You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with `resources` as explained here:
...

Das ist blöd! Wenn ich darüber nachdenke, Ich habe als: 'img_search' in der URL einer anderen Seite verwendet. Dies ist die Ursache dieser Zeit. Ändern Sie daher den Pfadnamen wie unten gezeigt.

config/routes.rb


resources :img_searchs, only: [:create, :new]
delete 'img_searchs/:id' => 'img_searchs#destroy', as: 'img_search_destroy'

Ändern Sie dann den Ansichtspfadnamen.

app/views


<% @img_searchs.each do |img_search| %>

...

<%= link_to "Löschen", img_search_destroy_path(img_search), method: :delete %>
<% end %>

Es hat gut funktioniert.

Zusammenfassung

Dieses Mal musste ich es schnell beheben, also Anstatt das vorhandene zu ändern als: 'img_search' Die neu hinzugefügte Version wurde geändert als: 'img_search' in: 'img_search_destroy'.

Ein weiterer Faktor, der diesmal passiert ist, ist Es geschah, weil ich die Priorität von Routen vergessen hatte Ich hoffe, es hilft, die Person zu beheben, die den gleichen Fehler hat.

Die Prioritätsreihenfolge von route.rb ist übrigens die oben beschriebene.

Es gibt viele Möglichkeiten, Fehler zu beheben, daher scheint es notwendig, sie Schritt für Schritt zu akkumulieren.

Recommended Posts

[Ruby on Rails] Wenn die ID-Erfassung des Parameters nicht gut lief
Ein Memo beim Abrufen der eingehenden Nummer mit Broadcast Receiver unter Android 9/10 funktioniert nicht
[Ruby on Rails] Suchfunktion (nicht ausgewählt)
Wenn das Ruby on Rails-Terminal zurückrollt
Wenn @Transactional of Spring Boot nicht funktioniert
Endgültige Bestätigung, wenn die Ruby-Version nicht wechselt
Ruby on Rails Elementary
Ruby on Rails Grundlagen
Ruby On Rails Association
Hinweis: Memory Analyzer funktioniert unter Mac OS nicht
[Ruby on Rails] Ändern Sie die URL-ID in den Spaltennamen
Ruby on Rails-Lernprogramm Problematische Hinweise unter Windows
[Railways] Railways funktioniert nicht, wenn sich das RubyMine-Projektstammverzeichnis nicht im Rails-Stammverzeichnis befindet.
[Ruby on Rails] Wenn beim Registrieren von Daten doppelte Datensätze vorhanden sind, registrieren Sie sich nicht
[Ruby on Rails] Wenn der Befehl heroku ausgeführt wird, wird der Befehl bash: heroku: nicht gefunden angezeigt. [Rails Tutorial]
Portfolioerstellung Ruby on Rails
Ruby on Rails Lernrekord -2020.10.04
[Ruby on Rails] Debuck (bindend.pry)
Ruby on Rails Lernrekord -2020.10.05
Ruby on Rails Lernrekord -2020.10.09
[Rails] Mit'id '=: id konnte nicht gefunden werden und die Aktualisierungsaktion wird nicht ausgeführt
Was zu überprüfen ist, wenn Schienen db: Migration nicht bestanden
(Ruby on Rails6) Anzeige der Datenbank, die die ID der Datenbank erhalten hat
Ruby on Rails lernen Rekord-2020.10.07 ②
Ruby on Rails-Datensatzsuche, erstellen Sie die Methode find_or_create_by, wenn nicht
[Rails] Behebung des Problems, dass das Sitzungszeitlimit nicht funktioniert
Ruby on Rails lernen Rekord-2020.10.07 ①
Brechen Sie die Ruby on Rails-Migration ab
[Ruby on Rails] Spaltenbeschränkungen beim Speichern in der Datenbank (4 Vertreter)
Ruby on Rails Lernrekord -2020.10.06
Zusammenfassung der Ruby on Rails-Validierung
Die Korrespondenz, wenn eine Java-Anwendung mit launch4j in exe erstellt wurde, funktioniert unter Windows, in dem openJDK installiert ist, nicht
Ruby on Rails Grundlegendes Memorandum
[Rails 5] [Turbolinks] Was tun, wenn JS aufgrund eines Seitenübergangs oder eines Browsers nicht funktioniert?
Feder sollte vermutet werden, wenn Rails-Befehle nicht richtig funktionieren
Erstellen Sie eine Entwicklungsumgebung, in der die Haltepunkte von Ruby on Rails unter Windows funktionieren
Der Haltepunkt funktioniert nicht, wenn Rails Minitest im Ruby Test Explorer ausgeführt wird
[Schienen] Was tun, wenn Schienen nicht reagieren oder nicht anhalten?
[Anfänger] Wenn Schienen nicht funktionieren
[Ruby on Rails] Leseversuch (: [],: Schlüssel)
Installation von Ruby + Rails unter Ubuntu 18.04 (rbenv)
[Ruby on Rails] Paging-Funktion eingeführt
Grundkenntnisse in Ruby on Rails
Progate Ruby on Rails5 Rückblick
Verwendung von Ruby on Rails
Ruby on Rails Japanisch-Englisch kompatibler i18n
(Ruby on Rails6) Gepostete Inhalte "löschen"
[Ruby on Rails] CSV-Ausgabefunktion