30 ответов:
для рельсов 3.2 или рельсов 4+
вы должны использовать
request.original_urlчтобы получить текущий URL.этот метод описан в способ original_url, но если вам интересно, реализация:
def original_url base_url + original_fullpath end
Для Рельсов 3:
можно писать
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"Сrequest.urlТеперь устарел.
Для Рельсов 2:
можно писать
request.urlвместоrequest.request_uri. Это объединяет протокол (обычно http://) с хостом, и request_uri, чтобы дать вам полный адрес.
ПРЕДУПРЕЖДЕНИЕ ОБ УСТАРЕВАНИИ:использование #request_uri не рекомендуется. Используйте полный путь.
Если вы используете рельсы 3.2 или рельсы 4 вы должны использовать
request.original_urlчтобы получить текущий URL.
документация по методу находится по адресу http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url но если вам интересно реализация:
def original_url base_url + original_fullpath end
Вы можете добавить это current_url метод в ApplicationController, чтобы вернуть текущий URL и разрешить слияние в других параметрах
# https://x.com/y/1?page=1 # + current_url( :page => 3 ) # = https://x.com/y/1?page=3 def current_url(overwrite={}) url_for :only_path => false, :params => params.merge(overwrite) endПример Использования:
current_url --> http://... current_url(:page=>4) --> http://...&page=4
для Ruby on Rails 3:
request.url request.host_with_portЯ запустил сеанс отладчика и запросил объект запроса:
request.public_methods
Мне нужно было приложение URL но с поддиректории. Я использовал:
root_url(:only_path => false)
Я думаю, что запрос.домен будет работать, но что делать, если вы находитесь в подкаталоге, как blah.blah.com? что-то вроде этого может работать:
<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>измените параметры в зависимости от структуры пути.
надеюсь, что это поможет!
похоже
request_uriявляется устаревшим в Ruby on Rails 3.Using #request_uri is deprecated. Use fullpath instead.
это работает для Ruby on Rails 3.0 и должно поддерживаться большинством версий Ruby on Rails:
request.env['REQUEST_URI']
использование Ruby 1.9.3-p194 и Ruby on Rails 3.2.6:
Если запрос.пути не работает для вас, попробуйте запрос.env ["HTTP_REFERER"]
вот моя история ниже.
Я получил аналогичную проблему с обнаружением текущего URL (который отображается в адресной строке для пользователя в ее браузере) для кумулятивных страниц, которые объединяют информацию от разных контроллеров, например,
http://localhost:3002/users/1/history/issues.пользователь может переключаться на разные списки видов вопросов. Все эти списки загружаются через Ajax с разных контроллеров / партиалов (без перезагрузки).
проблема заключалась в том, чтобы установить правильный путь для кнопки "Назад" в каждом элементе списка, чтобы кнопка "назад" могла правильно работать как на своей собственной странице, так и на накопительной странице история.
в случае, если я использую запрос.пути, он возвращает путь последнего запроса JavaScript, который определенно не является URL, который я ищу для.
поэтому я использовал запрос.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
ни одно из предложений здесь в потоке не помогло мне, к сожалению, за исключением того, где кто-то сказал, что он использовал отладчик, чтобы найти то, что он искал.
Я создал некоторые пользовательские страницы ошибок вместо стандартной 404 и 500, но
request.urlзакончился/404вместо ожидаемого/non-existing-mumbo-jumbo.что мне нужно было использовать
request.original_url
вы можете использовать метод ruby:
:root_urlкоторый получит полный путь с базовым url:
localhost:3000/bla
в Rails 3 Вы можете использовать
request.original_urlhttp://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
рельсы 4.0
можно использовать
request.original_url, вывод будет таким, как показано ниже примерget "/articles?page=2" request.original_url # => "http://www.example.com/articles?page=2"
Если вы хотите быть конкретным, то есть, вы знаете путь, который вам нужен:
link_to current_path(@resource, :only_path => false), current_path(@resource)
вы можете использовать любой на рельсы 3.2:
request.original_url or request.env["HTTP_REFERER"] or request.env['REQUEST_URI']Я думаю, что это будет работать везде
"#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}"
чтобы получить URL запроса без каких-либо параметров запроса.
def current_url_without_parameters request.base_url + request.path end
можно использовать
request.original_urlили
"#{request.protocol}#{request.host_with_port}"чтобы получить текущий URL.
для рельсов 3.2 или рельсов 4 Просто получить таким образом " запрос.original_url" Ссылка: оригинальный метод URL
Для Рельсов 3 Как просьба.URL-адрес является устаревшим.Мы можем получить абсолютный путь путем объединения
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"Для Рельсов 2
request.url
вы можете установить переменную
URI.parse(current_url), Я еще не вижу этого предложения здесь, и это работает для меня.
чтобы получить абсолютный URL, что означает, что
from the rootон может отображаться следующим образом<%= link_to 'Edit', edit_user_url(user) %>помощник users_url создает URL-адрес, который включает протокол и хост имя. Помощник users_path создает только часть пути.
users_url: http://localhost/users users_path: /users
Comments