Pfadhelfer generieren Pfade mit Punkten anstelle von Schrägstrichen


89

In meiner route.rb habe ich folgendes:

resources :message_threads

Wenn ich anrufe:

message_threads_path(1)

Ich bekomme:

/message_threads.1

Warum ist das? Meine anderen Ressourcen funktionieren einwandfrei. Pluralisiere ich das nicht richtig oder so?

Antworten:


141

Ja, dies ist ein Pluralisierungsfehler.

Wenn Sie die ID 1 übergeben, gehe ich davon aus, dass Sie einen einzelnen Datensatz anzeigen möchten.

Sie müssen also den singulären 'message_thread' verwenden:

message_thread_path(1)

Welches ergibt:

http://localhost:3000/message_threads/1

3
Heh. Es passiert uns allen; häufig. Wahrscheinlich wird es nicht das letzte Mal sein, dass Sie diesen Fehler sehen!
— Scott

Ich erhalte denselben Fehler mit einer benannten Route, die ich erstellt habe, und pluralisiere sie nicht. Was wäre die Lösung dort?
— Kakubei

1
@kakubei, überprüfen Sie Ihre Routendatei. Rufst du an resources :my_modeloder resources :my_models? (Sie müssen in der Routendatei pluralisieren.)
— JellicleCat

Alle meine Routen sind pluralisiert.
— Kakubei

1
Gerade um 17 Uhr gegangen, wollte gerade meinen Kopf gegen die Tastatur schlagen, das war es. Danke, Mann.
— Phantomwal

19

Manchmal ist dies auch der Fall, wenn Sie in Ihrer Route keinen: as-Parameter angeben:

delete "delete/:id" => "home#delete"

Gewechselt zu:

delete "delete/:id" => "home#delete", as: :delete

(Ignorieren Sie das seltsame Beispiel, es ist zufällig etwas, auf das wir gerade für eine interne App gestoßen sind, die wir erstellen.)


4
Das hat bei mir funktioniert. Angabe : as gab mir einen Namen, an den ich "_path" anhängen und Rails wissen lassen konnte, wonach zum Teufel ich in link_to gefragt habe. Ursprünglich, als meine Routendatei Folgendes hatte: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get] Mein Ansichts-Markup: <%= link_to "Show Details", xyz_show_path(@project) %> Produzierte weiter: http://localhost:3000/xyz/show.1 Ändern der Routendatei in: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get], :as => "show" Erlaubt: Funktioniert <%= link_to "Show Details", show_path(@project) %> .
— Ayang

0

Andere Leute, die hier landen, könnten in dieser Situation sein:

Wenn Sie eine einzelne Ressource in Ihrem routes.rb:

resource :map

Sie müssen kein Objekt an übergeben map_path. Der Versuch, einen Anruf zu tätigen, map_path(map)führt zu einem ähnlichen Verhalten (dh einer URL wie map.12).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.