В чем разница между _url и _path при использовании маршрутов в рельсах
Когда мы определяем маршруты в routes.rb
, используя имя типа map.some_link
. Мы можем использовать ссылку двумя способами: some_link_url
, some_link_path
.
- В чем разница между этими двумя?
- Что более безопасно использовать?
Ответы
Ответ 1
У меня был тот же вопрос, и я написал небольшой пост об этом в своем блоге
Причина суммирована здесь (я нашел это на форуме):
* _path для представлений, потому что ahrefs неявно связаны с текущим URL. Так что повторять это снова и снова было бы пустой тратой байтов. В контроллере, однако, * _url необходим для redirect_to, потому что спецификация HTTP требует, чтобы заголовок Location: в перенаправлениях 3xx был полным URL.
Вот еще одно объяснение, которое говорит, что это зависит от того, нужно ли нам использовать абсолютный URI при соединении с сайтом SSL с сайта без SSL, и наоборот.
То, что я прочитал до сих пор, не предполагает, что один из них более безопасен, чем другой. Это действительно сводится к тому, что является "правильным" использованием.
Ответ 2
path
является относительным, а url
является абсолютным.
Ответ 3
Пример разницы для ресурса, называемого "пользователь":
users_url # => http://localhost:3000/users
users_path # => /users
Ответ 4
Тот же ответ, что и Petros, за исключением того, что современные браузеры обрабатывают относительные перенаправления просто отлично. (Я бы прокомментировал его ответ, но я пока не могу.)
Ответ 5
Безопасным, если вы имеете в виду не подвергать всех переданных данных, тогда путь _path лучше, поскольку он генерирует относительный URL-адрес, например "/login", но _path дает " http://localhost:3000/login. Пожалуйста, обратитесь к этому сообщению в блоге, которое я нашел где-то назад относительно того же. Когда _url лучше, чем _path
Ответ 6
_url даст весь путь. Поскольку он содержит имя домена и протокол, вы можете использовать его, например. для отправки электронной почты или перенаправления на другой домен и т.д.
_path вернет путь, который находится после "/" без домена, протокола и т.д. Поэтому вы можете использовать его время от времени (я думаю), где вам не нужны детали домена.
Ответ 7
Помощник _url
генерирует строку, содержащую весь URL, в то время как хелпер _path
генерирует строку, содержащую относительный путь из корня приложения, например:
photos_url # => "http://www.example.com/photos"
photos_path # => "/photos"
По Rails Guides - Маршрутизация.