Nazwane trasy _path vs _url

109

Railsy zapewniają nazwane trasy .

Pomocnika tras można wywołać za pomocą ścieżki lub adresu URL

np. z dokumentów:

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

szczerze mówiąc, nigdy jeszcze nie korzystałem z *_urlpomocnika, mogłem sprawić, że wszystko będzie działać *_path.

Byłem trochę zdezorientowany, jaki jest cel tych dwóch różnych pomocników?

czym różnią się od siebie?

kilka prawdziwych przykładów z wyjaśnieniami, kiedy użyć tego, co byłoby świetne.

Pritesh Jain
źródło

Odpowiedzi:

156

_pathpomocnicy udostępniają ścieżkę względem katalogu głównego serwisu. Prawdopodobnie powinieneś tego używać przez większość czasu.

_urlpomocnicy zapewniają bezwzględną ścieżkę, w tym protokół i nazwę serwera. Odkryłem, że używam ich głównie w e-mailach podczas tworzenia linków do aplikacji na serwerze. Powinny być używane głównie przy udostępnianiu linków do użytku zewnętrznego. (Pomyśl z linkami e-mailowymi, kanałami RSS i takimi rzeczami, jak pole adresu URL kopiowania i wklejania w sekcji „Udostępnij” wideo YouTube).

Chris Peters
źródło
obie odpowiedzi są prawie podobne, ale daję ci poprawną odpowiedź na ten przykład „skopiuj i wklej pole adresu URL pod sekcją„ Udostępnij ”filmu na YouTube” i już +1 dla @mori :)
Pritesh Jain
Dzięki. Tworzę rozwiązanie DAM, w którym znajduje się pole kopiuj / wklej „Udostępnij adres URL” podobne do tego, co robi YouTube. To była jedna z pierwszych rzeczy, które przyszły mi do głowy.
Chris Peters
13

Kiedy umieścisz łącze we własnej witrynie, część trasy dotycząca domeny jest zbędna i zwiększa rozmiar strony, więc możesz po prostu użyć części adresu URL z *_pathpomocnikiem. Z drugiej strony, jeśli adres URL ma być używany poza witryną, np. E-mail lub kanał RSS, potrzebny jest cały adres, więc użyj *_urlpomocnika.

Mori
źródło
Niedawno miałem problem z linkami i domeną, a pomocnik _url był moim jedynym sposobem na uzyskanie linków przy użyciu właściwej domeny, a nie linków „związanych z hostingiem”.
Pierre-Adrien Buisson
1
Używam również pomocnika _url, gdy w aplikacji są subdomeny. Na przykład, gdy im na abc.example.com _path przekieruje do abc.example.com/somesection, podczas gdy _url przekieruje poprawnie na example.com/somesection
Wordica
10

Jak wyjaśniają inne odpowiedzi, powinieneś używać _urlw linkach e-mailowych itp. Ale chciałbym dodać, że powinieneś również używać _urlw przekierowaniach, jak wyjaśniono tutaj:

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

i tu:

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

Możesz również zapoznać się z odpowiednią sekcją specyfikacji HTTP tutaj:

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

Daniel Romero
źródło
1
Cytując pierwszy odsyłacz (na wypadek, gdyby zniknął): „Jednak w kontrolerze * _url jest potrzebne dla redirect_to, ponieważ specyfikacja HTTP wymaga, aby nagłówek Location: w przekierowaniach 3xx był pełnym adresem URL.”
Terrabits,
2

_path zapewnia ścieżkę względną.

_url zapewnia ścieżkę bezwzględną.

Za każdym razem, gdy wysyłasz adres URL w e-mailu itp., Najlepiej jest użyć _url zamiast _path.

SD
źródło
Głosowanie w dół, ponieważ jest to dokładnie to, na co Chris Peters odpowiedział już ponad dwa lata przed tą odpowiedzią. Zbędne odpowiedzi nie są pomocne.
jeffdill2