ruby-on-rails - from - роуты rails
Как получить текущий абсолютный URL-адрес в Ruby on Rails? (20)
Для Rails 3.2 или Rails 4+
Вы должны использовать request.original_url
для получения текущего URL-адреса.
Этот метод документируется методом original_url , но если вам интересно, реализация такова:
def original_url
base_url + original_fullpath
end
Для Rails 3:
Вы можете написать "#{request.protocol}#{request.host_with_port}#{request.fullpath}"
, так как request.url
теперь устарел.
Для Rails 2:
Вы можете написать request.url
вместо request.request_uri
. Это объединяет протокол (обычно http: //) с хостом и request_uri, чтобы предоставить вам полный адрес.
Как я могу получить текущий абсолютный URL-адрес в моем представлении Ruby on Rails?
request.request_uri
возвращает только относительный URL.
В Rails 3 вы можете использовать
request.original_url
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
Вы можете добавить этот метод 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
Вы можете использовать
request.original_url
или же
"#{request.protocol}#{request.host_with_port}"
для получения текущего URL-адреса.
Вы можете использовать метод ruby:
:root_url
который получит полный путь с базовым url:
localhost:3000/bla
Вы можете установить переменную в URI.parse(current_url)
, я пока не вижу это предложение, и оно работает для меня.
Для рельсов 3:
request.fullpath
Если вы используете Rails 3.2 или Rails 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
Использование 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 из разных контроллеров / частичных (без перезагрузки).
Проблема заключалась в том, чтобы установить правильный путь для кнопки «Назад» в каждом элементе списка, чтобы кнопка «Назад» могла корректно работать как на своей странице, так и в кумулятивной истории страниц.
В случае, если я использую 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
Мне нужен URL приложения, но с подкаталогом. Я использовал:
root_url(:only_path => false)
ПРЕДУПРЕЖДЕНИЕ О ДЕПРЕКАЦИИ : Использование #request_uri устарело . Вместо этого используйте полный путь.
Похоже, что request_uri
устарел в Ruby on Rails 3.
Using #request_uri is deprecated. Use fullpath instead.
Чтобы получить URL-адрес запроса без каких-либо параметров запроса.
def current_url_without_parameters
request.base_url + request.path
end
Чтобы получить абсолютный URL-адрес, который означает, что from the root
он может отображаться следующим образом
<%= link_to 'Edit', edit_user_url(user) %>
Помощник users_url создает URL-адрес, содержащий имя протокола и хоста. Помощник users_path генерирует только часть пути.
users_url: http://localhost/users
users_path: /users
Я думаю, что request.domain будет работать, но что, если вы находитесь в подкаталоге, таком как blah.blah.com? Что-то вроде этого могло бы работать:
<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>
Измените параметры на основе структуры вашего пути.
Надеюсь, это поможет!
Я думаю, что метод Ruby on Rails 3.0 теперь request.fullpath
.
если вы хотите быть конкретным, то есть знаете, какой путь вам нужен:
link_to current_path(@resource, :only_path => false), current_path(@resource)
Rails 4.0
вы можете использовать request.original_url
, вывод будет приведен ниже.
get "/articles?page=2"
request.original_url # => "http://www.example.com/articles?page=2"
url_for(params)
И вы можете легко добавить новый параметр:
url_for(params.merge(:tag => "lol"))
(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)