Los ayudantes de ruta generan rutas con puntos en lugar de barras

89

En mi route.rb tengo lo siguiente:

resources :message_threads

Cuando llamo:

message_threads_path(1)

Yo obtengo:

/message_threads.1

¿Por qué es esto? Mis otros recursos funcionan bien. ¿No estoy pluralizando esto correctamente o algo así?

ghempton
fuente

Respuestas:

142

Sí, este es un error de pluralización.

Al pasar el ID 1, supongo que desea mostrar un solo registro.

Entonces necesitas usar el singular 'message_thread':

message_thread_path(1)

Que cederá:

http://localhost:3000/message_threads/1
Scott
fuente
3
Je. Nos pasa a todos; frecuentemente. ¡Probablemente no será la última vez que vea este error!
Scott
Recibo este mismo error con una ruta con nombre que creé y no la estoy pluralizando. ¿Cuál sería la solución allí?
kakubei
1
@kakubei, revisa tu archivo de rutas. ¿Estás llamando resources :my_modelo resources :my_models? (Necesita pluralizar en el archivo de rutas.)
JellicleCat
Todas mis rutas están pluralizadas.
kakubei
1
Apenas pasaban las 5 pm, estaba a punto de golpearme la cabeza contra el teclado, eso era todo. Gracias hombre.
Phantomwhale
19

A veces, esto también ocurre cuando no proporciona un parámetro: as en su ruta:

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

Cambiado a:

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

(ignore el ejemplo extraño, resultó ser algo que acabamos de encontrar para una aplicación interna que estamos construyendo)

Jamon Holmgren
fuente
4
Esto funcionó para mí. Especificando : as me dio un nombre al que podría agregar "_path" y hacer que Rails supiera qué demonios estaba pidiendo en link_to. Originalmente, cuando mi archivo de rutas tenía: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get] mi marcado de vista: <%= link_to "Show Details", xyz_show_path(@project) %> seguía produciendo: http://localhost:3000/xyz/show.1 Cambiando el archivo de rutas a: match "/xyz/show/:project_id" => "xyz#show_project", :via => [:get], :as => "show" permitido: <%= link_to "Show Details", show_path(@project) %> para que funcione.
ayang
0

Otras personas que aterrizan aquí podrían estar en esta situación:

Si tiene un recurso singular declarado en su routes.rb:

resource :map

No es necesario que le pases un objeto map_path. Intentar llamar map_path(map)resultará en un comportamiento similar (es decir, una URL como map.12).

techpeace
fuente