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?

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

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)


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.