Названі маршрути _path vs _url


109

Rails передбачає названі маршрути .

Помічником маршрутів можна викликати за допомогою шляху або URL-адреси

наприклад, із документів:

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

відверто кажучи, я ніколи ще не використовував *_urlпомічників, мені вдалося налагодити роботу *_path.

Я трохи розгубився, яка мета цих двох різних помічників?

чим вони відрізняються один від одного?

кілька реальних прикладів з поясненнями, коли використовувати, що було б чудово.

Відповіді:


156

_pathпомічники пропонують відносний шлях до сайту-кореня. Напевно, ви повинні використовувати це більшу частину часу.

_urlпомічники забезпечують абсолютний шлях, включаючи ім'я протоколу та сервера. Я виявив, що в основному я їх використовую в електронних листах під час створення посилань на додаток на сервері. Їх слід в основному використовувати при наданні посилань для зовнішнього використання. (Подумайте про посилання електронної пошти, RSS та такі речі, як поле копіювання та вставки URL-адреси у розділі "Поділитися" відео YouTube.)


і відповіді на них майже однакові , але я віддам правильну відповідь вам тор цього прикладу «копіювати і вставити поле URL - під ваше відео YouTube в" "розділі" Частки і вже +1 за @mori :)
Pritesh Jain

Дякую. Я будую рішення DAM, де є поле "Копіювати / вставляти URL-адресу", подібне до того, що робить YouTube. Це було одне з перших речей, що прийшло в голову.
Кріс Пітерс

13

Коли ви розміщуєте посилання на своєму власному сайті, доменна частина маршруту є зайвою і додає розмір сторінки, тому ви можете просто використовувати частину шляху URL-адреси за допомогою *_pathпомічника. З іншого боку, якщо URL-адреса повинна використовуватися за межами вашого веб-сайту, наприклад, електронною поштою або RSS-стрічкою, потрібна вся URL-адреса, тому використовуйте *_urlпомічник.


Нещодавно у мене виникли проблеми із посиланнями та доменом, і помічник _url був моїм єдиним засобом отримати посилання за допомогою відповідного домену, а не "хостинг".
П’єр-Адрієн Буйсон

1
Я також використовую _url помічник, коли в додатку є деякі субдомени. Наприклад, коли im на abc.example.com _path буде перенаправляти на abc.example.com/somesection, коли _url буде правильно перенаправляти на example.com/somesection
Wordica

10

Як пояснюються інші відповіді, ви повинні використовувати _urlв посиланнях електронної пошти тощо. Але я хотів би додати, що ви також повинні використовуватись _urlу переадресаціях, як пояснено тут:

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

і ось:

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

Ви також можете подивитися відповідний розділ специфікації HTTP тут:

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


1
Цитуючи перше посилання (якщо воно зникає): "Однак у контролері * _url потрібен для redirect_to, оскільки специфікація HTTP вимагає, щоб заголовок Location: 3xx переспрямовував повну URL-адресу."
Терабіти

2

_path забезпечує відносний шлях.

_url забезпечує абсолютний шлях.

Щоразу, коли ви надсилаєте URL-адресу електронною поштою тощо, найкраще використовувати _url замість _path.


Відхиляючись, тому що саме це Кріс Пітерс відповів уже за два роки до цієї відповіді. Зайві відповіді не корисні.
jeffdill2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.