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?

Ghempton
quelle

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
Scott
quelle
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.)

Jamon Holmgren
quelle
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).

techpeace
quelle