Was ist der Unterschied zwischen _url und _path bei der Verwendung der Routen in Schienen?

68

Wenn wir definieren Routen in routes.rbdie Namen wie unter Verwendung von map.some_link.Wir den Link in zwei Arten - verwenden kann some_link_url, some_link_path.

  • Was sind die Unterschiede zwischen den beiden?
  • Welches ist sicherer zu verwenden?
MohamedSanaulla
quelle

Antworten:

86

Ich hatte die gleiche Frage und schrieb einen kleinen Beitrag darüber in meinem Blog

Der Grund ist hier zusammengefasst (ich habe dies in einem Forum gefunden):

* _path sind für Ansichten, da ahrefs implizit mit der aktuellen URL verknüpft sind. Es wäre also eine Verschwendung von Bytes, es immer wieder zu wiederholen. In der Steuerung wird jedoch * _url für redirect_to benötigt, da die HTTP-Spezifikation vorschreibt, dass der Location: -Header in 3xx-Weiterleitungen eine vollständige URL ist.

Hier ist eine weitere Erklärung, die besagt, dass es davon abhängt, ob wir einen absoluten URI verwenden müssen, wenn von einer Nicht-SSL-Site aus eine Verbindung zu einer SSL-Site hergestellt wird, und umgekehrt.

Was ich bisher gelesen habe, deutet nicht darauf hin, dass einer von ihnen sicherer ist als der andere. Es kommt wirklich darauf an, was die "richtige" Verwendung ist.

Petros
quelle
3
Vielen Dank. Fand es nützlich. In den Controllern verwenden wir also "_url", während wir in den Ansichten "_path" verwenden können, obwohl "_url" auch dort noch verwendet werden kann.
MohamedSanaulla
14
You don't need to use *_url for controllers, path will work just as well. You should only use _url when displaying the route to outside sources.
Ryan Bigg
3
To clarify some more: the _path output will work just as well for the Location header in a Redirect. The browser will interpret that as a relative-to-root redirect.
Ryan Bigg
2
The quote in the answer is incorrect. _path works in controllers.
Emil
2
The URL to your blog post is 404'ing. Can you update the link?
jshah
81

pathist relativ, während urlabsolut ist.

ponzao
quelle
2
Eher prägnant. Ich mag prägnant. ;) +1
Sholsinger
2
Perfekt. Die Verwendung von _url ist im Controller (serverseitig) erforderlich, und _path ist in der Ansicht (Browser-Ende) engouh.
Arun
Kurze, prägnante Antwort +1
Mike W
38

Ein Beispiel für den Unterschied für eine Ressource namens "Benutzer":

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

By secure if you mean not exposing all the data passed, then _path is better as it generates a relative url, something like '/login' but _path would give 'http://localhost:3000/login'. Please refer to this blog post i found sometime back regarding the same. When _url is better than _path

Alok Swain
quelle
3
I'm afraid this is incorrect. Using _path for security reasons doesn't provide any security. This would be the same as saying that the IP address of a web server should be kept secret, when a simple DNS request reveals this information.
jefflunt
1
Likewise, with the example given above regarding hiding the host and port "localhost:3000" for security, is incorrect. Discovering this information is simple using a software network scanning tool, widely available.
jefflunt
1

_url gibt den gesamten Pfad an. Da es den Domainnamen und das Protokoll enthält, können Sie es z. um E-Mails zu senden oder an eine andere Domain weiterzuleiten usw.

_path gibt den Pfad nach '/' ohne Domain, Protokoll usw. zurück. Sie können ihn also ab und zu verwenden (ich denke), wenn Sie keine Details zur Domain benötigen.

Radhika
quelle
-1

Der _urlHelfer generiert eine Zeichenfolge, die die gesamte URL enthält, während der _pathHelfer eine Zeichenfolge generiert, die den relativen Pfad aus dem Stammverzeichnis der Anwendung enthält, z.

photos_url  # => "http://www.example.com/photos"
photos_path # => "/photos"

Gemäß Rails Guides - Routing .

jbk
quelle