Как получить текущий абсолютный URL-адрес в Ruby on Rails?
Как я могу получить текущее абсолютный URL-адрес в моем представлении Ruby on Rails?
на request.request_uri
возвращает только относительный URL.
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 на 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_url
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
рельсы 4.0
можно использовать request.original_url
, вывод будет таким, как показано ниже example
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)
вы можете использовать любой для rails 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