Benannte Routen _path vs _url

109

Rails bietet benannte Routen .

Der Routen-Helfer kann über Pfad oder URL aufgerufen werden

zB aus docs:

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

Ehrlich gesagt habe ich noch nie einen *_urlHelfer benutzt, ich konnte die Dinge zum Laufen bringen *_path.

Ich war etwas verwirrt, was der Zweck dieser beiden verschiedenen Helfer ist.

Wie unterscheiden sie sich voneinander?

Einige echte Beispiele mit Erklärungen, wann man das verwendet, was großartig wäre.

Pritesh Jain
quelle

Antworten:

155

_pathHelfer stellen einen Site-Root-relativen Pfad bereit. Sie sollten dies wahrscheinlich die meiste Zeit verwenden.

_urlHelfer geben einen absoluten Pfad an, einschließlich Protokoll und Servername. Ich habe festgestellt, dass ich diese hauptsächlich in E-Mails verwende, wenn ich Links zur App auf dem Server erstelle. Sie sollten hauptsächlich verwendet werden, wenn Links für den externen Gebrauch bereitgestellt werden. (Denken Sie an E-Mail-Links, RSS und Dinge wie das URL-Feld zum Kopieren und Einfügen im Abschnitt "Teilen" eines YouTube-Videos.)

Chris Peters
quelle
Beide Antworten sind fast ähnlich, aber ich gebe Ihnen die richtige Antwort für dieses Beispiel "URL-Feld kopieren und einfügen unter dem Abschnitt" Teilen "eines YouTube-Videos" und bereits +1 für @mori :)
Pritesh Jain
Vielen Dank. Ich erstelle eine DAM-Lösung, in der es ein Feld zum Kopieren / Einfügen von "URL teilen" gibt, ähnlich wie bei YouTube. Es war eines der ersten Dinge, die mir in den Sinn kamen.
Chris Peters
13

Wenn Sie einen Link in Ihre eigene Site einfügen, ist der Domänenteil der Route redundant und erhöht die Seitengröße, sodass Sie nur den Pfadteil der URL mit dem *_pathHelfer verwenden können. Wenn die URL jedoch außerhalb Ihrer Website verwendet werden soll, z. B. eine E-Mail oder ein RSS-Feed, wird die gesamte URL benötigt. Verwenden Sie daher den *_urlHelfer.

Mori
quelle
Ich hatte kürzlich ein Problem mit Links und Domains, und der _url-Helfer war mein einziges Mittel, um Links über die richtige Domain und nicht über "Hosting-bezogene" Links zu erhalten.
Pierre-Adrien Buisson
1
Ich benutze auch _url helper, wenn einige Subdomains in der App sind. Zum Beispiel, wenn ich auf abc.example.com bin, wird _path zu abc.example.com/somesection umgeleitet, wenn _url korrekt zu example.com/somesection umleitet
Wordica
10

Wie die anderen Antworten erklären, sollten Sie sie _urlin E-Mail-Links usw. verwenden. Ich möchte jedoch hinzufügen, dass Sie sie auch _urlin Weiterleitungen verwenden sollten, wie hier erläutert:

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

und hier:

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

Sie können sich hier auch den entsprechenden Abschnitt der HTTP-Spezifikation ansehen:

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

Daniel Romero
quelle
1
Zitieren des ersten Links (falls dieser verschwindet): "Im Controller 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."
Terrabits
2

_path liefert einen relativen Pfad.

_url liefert den absoluten Pfad.

Wenn Sie eine URL per E-Mail usw. senden, empfiehlt es sich, _url anstelle von _path zu verwenden.

SD
quelle
Downvoting, denn genau das hatte Chris Peters bereits über zwei Jahre vor dieser Antwort geantwortet. Redundante Antworten sind nicht hilfreich.
Jeffdill2