Rutas con nombre _path vs _url

109

Rails proporciona rutas con nombre .

Se puede llamar al ayudante de rutas usando la ruta o la URL

por ejemplo, de documentos:

# and provide these named routes
root_url   # => 'http://www.example.com/'
root_path  # => '/'

francamente hablando, nunca he usado *_urlhelper todavía, pude hacer que las cosas funcionen usando *_path.

Estaba un poco confundido ¿cuál es el propósito de estos dos ayudantes diferentes?

¿en qué se diferencian entre sí?

algunos ejemplos reales con explicaciones de cuándo usar lo que sería genial.

Pritesh Jain
fuente

Respuestas:

156

_pathlos ayudantes proporcionan una ruta relativa a la raíz del sitio. Probablemente debería usar esto la mayor parte del tiempo.

_urllos ayudantes proporcionan una ruta absoluta, incluido el protocolo y el nombre del servidor. Descubrí que los uso principalmente en correos electrónicos cuando creo enlaces a la aplicación en el servidor. Deben utilizarse principalmente al proporcionar enlaces para uso externo. (Piense en enlaces de correo electrónico, RSS y cosas como el campo de URL de copiar y pegar en la sección "Compartir" de un video de YouTube).

Chris Peters
fuente
Ambas respuestas son casi similares, pero le doy la respuesta correcta en este ejemplo "copiar y pegar el campo URL en la sección" Compartir "de un video de YouTube" y ya +1 para @mori :)
Pritesh Jain
Gracias. Estoy construyendo una solución DAM donde hay un campo de copiar / pegar "Compartir URL" similar a lo que hace YouTube. Fue una de las primeras cosas que me vino a la mente.
Chris Peters
13

Cuando coloca un enlace en su propio sitio, la parte del dominio de la ruta es redundante y aumenta el tamaño de la página, por lo que puede usar la parte de la ruta de la URL con el *_pathayudante. Por otro lado, si la URL se va a consumir fuera de su sitio, por ejemplo, un correo electrónico o una fuente RSS, se necesita la URL completa, así que use el *_urlasistente.

Mori
fuente
Recientemente tuve un problema con los enlaces y el dominio, y el ayudante _url era mi único medio para obtener enlaces utilizando el dominio adecuado y no los enlaces "relacionados con el alojamiento".
Pierre-Adrien Buisson
1
También uso _url helper cuando tengo algunos subdominios en la aplicación. Por ejemplo, cuando estoy en abc.example.com, _path redirigirá a abc.example.com/somesection cuando _url redirigirá correctamente a example.com/somesection
Wordica
10

Como explican las otras respuestas, debe usar _urlen enlaces de correo electrónico, etc. Pero me gustaría agregar que también debe usar _urlen redirecciones, como se explica aquí:

https://www.ruby-forum.com/topic/101346#221052

y aquí:

http://viget.com/extend/rails-named-routes-path-vs-url

También puede echar un vistazo a la sección relevante de la especificación HTTP aquí:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30

Daniel Romero
fuente
1
Citando el primer enlace (en caso de que desaparezca): "En el controlador, sin embargo, * _url es necesario para redirect_to porque la especificación HTTP exige que el encabezado Location: en las redirecciones 3xx sea una URL completa".
Terrabits
2

_path proporciona una ruta relativa.

_url proporciona una ruta absoluta.

Siempre que envíe una URL en un correo electrónico, etc., es una buena práctica utilizar _url en lugar de _path.

Dakota del Sur
fuente
Votar en contra porque esto es exactamente lo que Chris Peters ya había respondido más de dos años antes de esta respuesta. Las respuestas redundantes no son útiles.
jeffdill2