Подтвердить что ты не робот

В чем разница между _url и _path при использовании маршрутов в рельсах

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

  • В чем разница между этими двумя?
  • Что более безопасно использовать?
4b9b3361

Ответ 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

Ответ 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 - Маршрутизация.