В чем разница между url и path при использовании маршрутов в rails


когда мы определяем маршруты в routes.rb используя имя типа map.some_link.Мы можем использовать ссылку двумя способами -some_link_url,some_link_path.

  • каковы различия между ними?
  • , который является более безопасным для использования?
7 57

7 ответов:

У меня был тот же вопрос и я писал небольшой пост об этом в моем блоге

причина приводится здесь (я нашел это на форуме):

*_path предназначены для представлений, поскольку ahrefs неявно связаны с текущим URL-адресом. Так что было бы пустой тратой байтов повторять это снова и снова. В контроллере, однако, *_url необходим для redirect_to, потому что спецификация HTTP требует, чтобы заголовок Location: в перенаправлениях 3xx был полным URL-АДРЕС.

вот еще одно объяснение который говорит, что это зависит от того, нужно ли использовать абсолютный URI при ссылке на сайт SSL с сайта без SSL и наоборот.

то, что я прочитал до сих пор, не предполагает, что любой из них более безопасен, чем другой. Это действительно сводится к тому, что такое "правильное" использование.

path является относительным в то время как url абсолютная.

пример разницы для ресурса под названием "пользователь":

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"

по состоянию на Направляющие Рельсы-Маршрутизация.