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.

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


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.


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


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.