Как получить текущий абсолютный URL в Ruby on Rails? - PullRequest
1006 голосов
/ 30 января 2010

Как получить текущий абсолютный URL в моем представлении Ruby on Rails?

request.request_uri возвращает только относительный URL.

Ответы [ 33 ]

16 голосов
/ 30 января 2010

Я думаю, что request.domain будет работать, но что, если вы находитесь в подкаталоге, например blah.blah.com? Примерно так может работать:

<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>

Измените параметры в зависимости от вашей структуры пути.

Надеюсь, это поможет!

14 голосов
/ 01 марта 2011

Похоже, request_uri устарела в Ruby on Rails 3.

Using #request_uri is deprecated. Use fullpath instead.
13 голосов
/ 10 августа 2012

Использование Ruby 1.9.3-p194 и Ruby on Rails 3.2.6:

Если request.fullpath не работает для вас, попробуйте request.env ["HTTP_REFERER"]

Вот моя история ниже.

У меня возникла аналогичная проблема с определением текущего URL (который отображается в адресной строке пользователя в ее браузере) для кумулятивных страниц, которые объединяют информацию с разных контроллеров, например, http://localhost:3002/users/1/history/issues.

Пользователь может переключаться на разные списки типов проблем. Все эти списки загружаются через Ajax с разных контроллеров / частичных (без перезагрузки).

Проблема заключалась в том, чтобы задать правильный путь для кнопки «Назад» в каждом элементе списка, чтобы кнопка «Назад» могла корректно работать как на своей собственной странице, так и на накопительной странице history .

В случае, если я использую request.fullpath , он возвращает путь последнего запроса JavaScript, который определенно не является URL-адресом, который я ищу.

Поэтому я использовал request.env ["HTTP_REFERER"] , в котором хранится URL-адрес последнего загруженного запроса.

Вот выдержка из частичного для принятия решения

- if request.env["HTTP_REFERER"].to_s.scan("history").length > 0
  - back_url = user_history_issue_path(@user, list: "needed_type")
- else
  - back_url = user_needed_type_issue_path(@user)
- remote ||= false
=link_to t("static.back"), back_url, :remote => remote
12 голосов
/ 14 апреля 2012

Это работает для Ruby on Rails 3.0 и должно поддерживаться большинством версий Ruby on Rails:

request.env['REQUEST_URI']
11 голосов
/ 19 июня 2012

Ни одно из предложений в этой ветке мне не помогло, к сожалению, кроме одного, где кто-то сказал, что использовал отладчик, чтобы найти то, что он искал.

Я создал несколько пользовательских страниц ошибок вместо стандартных 404 и 500, но request.url закончился /404 вместо ожидаемого /non-existing-mumbo-jumbo.

Мне нужно было использовать

request.original_url
9 голосов
/ 30 января 2010

Если под относительным вы подразумеваете просто без домена, то посмотрите на request.domain.

9 голосов
/ 21 июля 2013

Вы можете использовать метод ruby:

:root_url

, который получит полный путь с базовым URL:

localhost:3000/bla
8 голосов
/ 11 мая 2012
(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)
6 голосов
/ 26 марта 2015

Рельсы 4.0

Вы можете использовать request.original_url, вывод будет таким, как приведенный ниже пример

get "/articles?page=2"

request.original_url # => "http://www.example.com/articles?page=2"
6 голосов
/ 13 марта 2013

В Rails 3 вы можете использовать

request.original_url

http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url

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