web-dev-qa-db-fra.com

Quelle est la différence entre _url et _path lors de l'utilisation des itinéraires dans rails

Lorsque nous définissons des itinéraires dans routes.rb en utilisant le nom comme map.some_link. Nous pouvons utiliser le lien de deux manières - some_link_url, some_link_path.

  • Quelles sont les différences entre les deux?
  • Quel est le plus sûr à utiliser?
68
MohamedSanaulla

J'ai eu la même question et j'ai écrit n petit article à ce sujet dans mon blog

La raison est résumée ici (je l'ai trouvée sur un forum):

* _path est pour les vues car les ahrefs sont implicitement liés à l'URL actuelle. Ce serait donc un gaspillage d'octets de le répéter encore et encore. Dans le contrôleur, cependant, * _url est nécessaire pour redirect_to car la spécification HTTP exige que l'en-tête Location: dans les redirections 3xx soit une URL complète.

Voici une autre explication qui dit que cela dépend si nous devons utiliser un URI absolu lors de la liaison à un site SSL à partir d'un site non SSL, et vice versa.

Ce que j'ai lu jusqu'à présent ne suggère pas que l'un d'eux soit plus sûr que l'autre. Cela se résume vraiment à ce qui est la "bonne" utilisation.

82
Petros

path est relatif tandis que url est absolu.

76
ponzao

Un exemple de la différence pour une ressource appelée "utilisateur":

users_url # => http://localhost:3000/users
users_path  # => /users
37
Jason

Même réponse que Petros, sauf que les navigateurs modernes gèrent très bien les redirections relatives . (Je commenterais sa réponse, mais je ne peux pas encore.)

2
Ian Lotinsky

Par sécurisé si vous entendez ne pas exposer toutes les données transmises, alors _path est mieux car il génère une URL relative, quelque chose comme '/ login' mais _path donnerait ' http: // localhost: 3000/login '. Veuillez vous référer à ce billet de blog que j'ai trouvé à propos de la même chose. Quand _url est meilleur que _path

1
Alok Swain

_url donnera le chemin complet. Comme il contient le nom de domaine et le protocole, vous pouvez l'utiliser par exemple. pour envoyer des e-mails ou rediriger vers un autre domaine, etc.

_path retournera le chemin qui est après '/' sans domaine, protocole, etc. Vous pouvez donc l'utiliser de temps en temps (je suppose), où vous n'avez pas besoin de détails sur le domaine.

1
Radhika