Именованные маршруты _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