В чем разница между url и path при использовании маршрутов в rails
когда мы определяем маршруты в routes.rb
используя имя типа map.some_link
.Мы можем использовать ссылку двумя способами -some_link_url
,some_link_path
.
- каковы различия между ними?
- , который является более безопасным для использования?
7 ответов:
У меня был тот же вопрос и я писал небольшой пост об этом в моем блоге
причина приводится здесь (я нашел это на форуме):
*_path предназначены для представлений, поскольку ahrefs неявно связаны с текущим URL-адресом. Так что было бы пустой тратой байтов повторять это снова и снова. В контроллере, однако, *_url необходим для redirect_to, потому что спецификация HTTP требует, чтобы заголовок Location: в перенаправлениях 3xx был полным URL-АДРЕС.
вот еще одно объяснение который говорит, что это зависит от того, нужно ли использовать абсолютный URI при ссылке на сайт SSL с сайта без SSL и наоборот.
то, что я прочитал до сих пор, не предполагает, что любой из них более безопасен, чем другой. Это действительно сводится к тому, что такое "правильное" использование.
пример разницы для ресурса под названием "пользователь":
users_url # => http://localhost:3000/users users_path # => /users
тот же ответ, что и Петрос, за исключением того, что современные браузеры обрабатывают относительные перенаправления просто штраф в размере. (Я бы прокомментировал его ответ, но пока не могу.)
по безопасности, если вы имеете в виду, не раскрывая все переданные данные, то _path лучше, поскольку он генерирует относительный url-адрес, что-то вроде '/login', но _path даст 'http://localhost:3000/login'. Пожалуйста, обратитесь к этому сообщению в блоге, которое я нашел когда-то назад относительно того же самого. когда _url лучше, чем _path
_url даст весь путь. Поскольку он содержит доменное имя и протокол, вы можете использовать его, например. для отправки электронной почты или перенаправление на другой домен и т. д.
_path вернет путь, который находится после ' / ' без домена, протокола и т. д. Так что вы можете использовать его время от времени(я думаю), где вам не нужны детали домена.
The
_url
помощник генерирует строку, содержащую весь URL, в то время как_path
helper генерирует строку, содержащую относительный путь от корня приложения, например:photos_url # => "http://www.example.com/photos" photos_path # => "/photos"
по состоянию на Направляющие Рельсы-Маршрутизация.