Les assistants de chemin génèrent des chemins avec des points au lieu de barres obliques

89

Dans mon routes.rb j'ai ce qui suit:

resources :message_threads

Quand j'appelle:

message_threads_path(1)

Je reçois:

/message_threads.1

Pourquoi est-ce? Mes autres ressources fonctionnent bien. Est-ce que je ne pluralise pas correctement ou quelque chose?

Ghempton
la source

Réponses:

142

Oui, c'est une erreur de pluralisation.

En passant l'ID 1, je suppose que vous souhaitez afficher un seul enregistrement.

Vous devez donc utiliser le singulier 'message_thread':

message_thread_path(1)

Ce qui donnera:

http://localhost:3000/message_threads/1
Scott
la source
3
Il h. Ça arrive à tout le monde; fréquemment. Ce ne sera probablement pas la dernière fois que vous verrez cette erreur!
Scott
J'obtiens cette même erreur avec une route nommée que j'ai créée et je ne la pluralise pas. Quelle serait la solution là-bas?
kakubei
1
@kakubei, vérifiez votre fichier de routes. Appelez-vous resources :my_modelou resources :my_models? (Vous devez mettre au pluriel dans le fichier de routes.)
JellicleCat
Tous mes itinéraires sont pluralisés.
kakubei
1
Je viens de partir 17h, j'étais sur le point de me cogner la tête contre le clavier, c'était ça. Merci mec.
Phantomwhale
19

Parfois, c'est aussi lorsque vous ne fournissez pas un: comme paramètre dans votre itinéraire:

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

Changé en:

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

(ignorez l'exemple étrange, il s'est avéré que c'était quelque chose que nous venons de rencontrer pour une application interne que nous construisons)

Jamon Holmgren
la source
4
Cela a fonctionné pour moi. Spécifier : as m'a donné un nom auquel je pourrais ajouter "_path" et faire savoir à Rails ce que je demandais dans link_to. À l'origine, lorsque mon fichier de routes avait: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get] mon balisage de vue: a <%= link_to "Show Details", xyz_show_path(@project) %> continué à produire: http://localhost:3000/xyz/show.1 Changement du fichier de routes en: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get], :as => "show" autorisé: <%= link_to "Show Details", show_path(@project) %> pour fonctionner.
ayang
0

D'autres personnes qui atterrissent ici pourraient se trouver dans cette situation:

Si vous avez une ressource singulière déclarée dans votre routes.rb:

resource :map

Vous n'avez pas besoin de passer un objet à map_path. Tenter d'appeler map_path(map)entraînera un comportement similaire (c'est-à-dire une URL semblable map.12).

techpeace
la source