Именованные маршруты _path vs _url
Rails предоставляет именованные маршруты.
Вспомогательный вызов маршрутов может быть вызван с использованием пути или URL-адреса
например, из документов:
# and provide these named routes
root_url # => 'http://www.example.com/'
root_path # => '/'
откровенно говоря, я никогда не использовал помощника *_url
, мне удалось заставить все работать, используя *_path
.
Я немного смутился, какова цель этих двух разных помощников?
как они отличаются друг от друга?
некоторые реальные примеры с объяснениями, когда использовать то, что было бы здорово.
Ответы
Ответ 1
_path
Помощники предоставляют относительный путь к сайту. Вероятно, вы должны использовать это большую часть времени.
_url
Помощники предоставляют абсолютный путь, включая имя протокола и сервера. Я обнаружил, что в основном я использую их в письмах при создании ссылок на приложение на сервере. В основном они должны использоваться при предоставлении ссылок для внешнего использования. (Подумайте, ссылки электронной почты, RSS и такие вещи, как поле для копирования и вставки URL в разделе "Поделиться" на YouTube.)
Ответ 2
Когда вы помещаете ссылку на свой собственный сайт, часть домена маршрута является избыточной и добавляет размер страницы, поэтому вы можете просто использовать часть пути URL-адреса с помощью помощника *_path
. С другой стороны, если URL-адрес должен потребляться вне вашего сайта, например, электронной почты или RSS-ленты, нужен весь URL-адрес, поэтому используйте помощник *_url
.
Ответ 3
Как объясняют другие ответы, вы должны использовать _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
Ответ 4
_path обеспечивает относительный путь.
_url обеспечивает абсолютный путь.
Всякий раз, когда вы отправляете URL-адрес по электронной почте и т.д., лучше использовать _url вместо _path.
Ответ 5
Как говорится Fernando здесь Я бы использовал url always ", это сэкономит вам много головных болей" Если когда-нибудь вы используете https.
Я не помню точно, почему и когда... возможно, с удаленными ссылками, но я помню, что решение было в изменении _path
для _url