Routes nommées _path vs _url

109

Rails fournit des itinéraires nommés .

L'assistant de routes peut être appelé en utilisant le chemin ou l'URL

par exemple à partir de documents:

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

franchement, je n'ai encore jamais utilisé *_urlhelper, j'ai pu faire fonctionner les choses *_path.

J'étais un peu confus quel est le but de ces deux aides différentes?

en quoi sont-ils différents les uns des autres?

quelques exemples réels avec des explications sur l'utilisation de ce qui serait génial.

Pritesh Jain
la source

Réponses:

156

_pathles helpers fournissent un chemin relatif à la racine du site. Vous devriez probablement l'utiliser la plupart du temps.

_urlles helpers fournissent un chemin absolu, y compris le protocole et le nom du serveur. J'ai constaté que je les utilise principalement dans les e-mails lors de la création de liens vers l'application sur le serveur. Ils doivent principalement être utilisés lors de la fourniture de liens à usage externe. (Pensez aux liens de courrier électronique, au RSS et à des éléments tels que le champ URL copier-coller sous la section "Partager" d'une vidéo YouTube.)

Chris Peters
la source
les deux réponses sont presque similaires mais je vous donne la bonne réponse pour cet exemple "Copiez et collez le champ URL sous la section" Partager "d'une vidéo YouTube" et déjà +1 pour @mori :)
Pritesh Jain
Merci. Je suis en train de créer une solution DAM où il y a un champ "Partager l'URL" de copier / coller similaire à ce que fait YouTube. C'était l'une des premières choses qui me vint à l'esprit.
Chris Peters
13

Lorsque vous mettez un lien dans votre propre site, la partie domaine de l'itinéraire est redondante et s'ajoute à la taille de la page, vous pouvez donc simplement utiliser la partie chemin de l'URL avec l' *_pathassistant. D'autre part, si l'URL doit être consommée en dehors de votre site, par exemple un e-mail ou un flux RSS, l'URL entière est nécessaire, utilisez donc l' *_urlassistant.

Mori
la source
J'ai récemment eu un problème avec les liens et le domaine, et l'aide _url était mon seul moyen d'obtenir des liens en utilisant le domaine approprié et non les liens "liés à l'hébergement".
Pierre-Adrien Buisson
1
J'utilise également _url helper lorsque j'ai des sous-domaines dans l'application. Par exemple, lorsque je suis sur abc.example.com, _path sera redirigé vers abc.example.com/somesection lorsque _url sera redirigé correctement vers example.com/somesection
Wordica
10

Comme l'expliquent les autres réponses, vous devriez utiliser _urldans les liens de courrier électronique, etc. Mais je voudrais ajouter que vous devriez également utiliser _urldans les redirections, comme expliqué ici:

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

et ici:

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

Vous pouvez également consulter la section correspondante de la spécification HTTP ici:

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

Daniel Romero
la source
1
Citant le premier lien (au cas où il disparaîtrait): "Dans le contrôleur, cependant, * _url est nécessaire pour redirect_to parce que la spécification HTTP exige que l'en-tête Location: dans les redirections 3xx soit une URL complète."
Terrabits
2

_path fournit un chemin relatif.

_url fournit un chemin absolu.

Chaque fois que vous envoyez une URL dans un e-mail, etc., il est recommandé d'utiliser _url au lieu de _path.

Dakota du Sud
la source
Downvoter parce que c'est exactement ce à quoi Chris Peters avait déjà répondu plus de deux ans avant cette réponse. Les réponses redondantes ne sont pas utiles.
jeffdill2