Именованные маршруты _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 :)
Притеш Джайн,
Спасибо. Я создаю решение DAM, в котором есть поле «Поделиться URL» для копирования / вставки, подобное тому, что делает YouTube. Это было одной из первых вещей, которые пришли в голову.
Крис Питерс,
13

Когда вы помещаете ссылку на свой собственный сайт, доменная часть маршрута является избыточной и увеличивает размер страницы, поэтому вы можете просто использовать часть пути URL-адреса с *_pathпомощником. С другой стороны, если URL-адрес будет использоваться за пределами вашего сайта, например, электронная почта или RSS-канал, потребуется весь URL-адрес, поэтому используйте *_urlпомощник.

Mori
источник
Недавно у меня возникла проблема со ссылками и доменом, и помощник _url был моим единственным средством получения ссылок с использованием правильного домена, а не ссылок, связанных с хостингом.
Пьер-Адриан Бюиссон,
1
Я также использую _url helper, когда в приложении есть поддомены. Например, когда 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».
Terrabits
2

_path предоставляет относительный путь.

_url предоставляет абсолютный путь.

Всякий раз, когда вы отправляете URL-адрес по электронной почте и т. Д., Рекомендуется использовать _url вместо _path.

SD
источник
Голосование против, потому что это именно то, что Крис Питерс уже ответил за два года до этого ответа. Избыточные ответы бесполезны.
jeffdill2