В чем разница между _url и _path при использовании маршрутов в рельсах - PullRequest
65 голосов
/ 28 февраля 2010

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

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

Ответы [ 7 ]

79 голосов
/ 28 февраля 2010

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

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

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

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

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

76 голосов
/ 28 февраля 2010

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

36 голосов
/ 22 декабря 2010

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

users_url # => http://localhost:3000/users
users_path  # => /users
2 голосов
/ 04 января 2011

Тот же ответ, что и у Petros, за исключением того, что современные браузеры прекрасно справляются с относительными перенаправлениями . (Я бы прокомментировал его ответ, но пока не могу.)

1 голос
/ 13 сентября 2013

_url даст весь путь. Так как он содержит имя домена и протокол, вы можете использовать его, например, для. для отправки электронной почты или перенаправления на другой домен и т. д.

_path будет возвращать путь после '/' без домена, протокола и т. Д. Таким образом, вы можете использовать его время от времени (я полагаю), где вам не нужны детали домена.

1 голос
/ 05 апреля 2010

Безопасным, если вы имеете в виду не показывать все переданные данные, тогда _path лучше, поскольку он генерирует относительный URL, что-то вроде '/ login', но _path даст 'http://localhost:3000/login'. Пожалуйста, обратитесь к этому сообщению в блоге, я нашел когда-то назад относительно того же самого. Когда _url лучше, чем _path

0 голосов
/ 04 июля 2017

Помощник _url генерирует строку, содержащую весь URL, а помощник _path создает строку, содержащую относительный путь из корня приложения, например ::

photos_url  # => "http://www.example.com/photos"
photos_path # => "/photos"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...