Como posso obter a URL atual absoluta na minha visualização Ruby on Rails?
O request.request_uri
retorna apenas o URL relativo.
Você deve usar request.original_url
para obter o URL atual.
Este método está documentado em original_url method , mas se você está curioso, a implementação é:
def original_url
base_url + original_fullpath
end
Você pode escrever "#{request.protocol}#{request.Host_with_port}#{request.fullpath}"
, já que request.url
está sendo reprovado.
Você pode escrever request.url
em vez de request.request_uri
. Isso combina o protocolo (geralmente http: //) com o host e request_uri para fornecer o endereço completo.
Eu acho que o método Ruby on Rails 3.0 é agora request.fullpath
.
Você poderia usar url_for(:only_path => false)
DEPRECATION WARNING: Usando #request_uri está obsoleto . Use fullpath em vez disso.
Se você estiver usando Rails 3.2 ou Rails 4 você deve usar request.original_url
para obter o URL atual.
A documentação para o método está em http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url mas se você está curioso, a implementação é:
def original_url
base_url + original_fullpath
end
Você pode adicionar este current_url método no ApplicationController para retornar a URL atual e permitir a mesclagem em outros parâmetros
# 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
Exemplo de Uso:
current_url --> http://...
current_url(:page=>4) --> http://...&page=4
Para Ruby on Rails 3:
request.url
request.Host_with_port
Eu ativei uma sessão de depurador e consultei o objeto de solicitação:
request.public_methods
Em Ruby on Rails 3.1.0.rc4:
request.fullpath
Eu precisava do aplicativo URL mas com o subdiretório. Eu usei:
root_url(:only_path => false)
url_for(params)
E você pode facilmente adicionar algum novo parâmetro:
url_for(params.merge(:tag => "lol"))
Eu acho que request.domain iria funcionar, mas e se você estiver em um subdiretório como blah.blah.com? Algo como isso poderia funcionar:
<%= request.env["HTTP_Host"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>
Altere os parâmetros com base na sua estrutura de caminho.
Espero que ajude!
Parece que request_uri
está obsoleto em Ruby on Rails 3.
Using #request_uri is deprecated. Use fullpath instead.
Usando o Ruby 1.9.3-p194 e o Ruby on Rails 3.2.6:
Se request.fullpath não funcionar para você, tente request.env ["HTTP_REFERER"]
Aqui está minha história abaixo.
Eu tenho problema semelhante com a detecção de URL atual (que é mostrada na barra de endereços do usuário em seu navegador) para páginas cumulativas que combinam informações de diferentes controladores, por exemplo, http://localhost:3002/users/1/history/issues
.
O usuário pode alternar para diferentes listas de tipos de problemas. Todas essas listas são carregadas via Ajax de diferentes controladores/parciais (sem recarregar).
O problema era definir o caminho correto para o botão Voltar em cada item da lista, para que o botão Voltar funcionasse corretamente tanto na sua própria página quanto na página cumulativa history.
Caso eu use request.fullpath , ele retorna o caminho da última requisição JavaScript que definitivamente não é a URL que estou procurando.
Então eu usei request.env ["HTTP_REFERER"] que armazena o URL da última requisição recarregada.
Aqui está um trecho da parcial para tomar uma decisão
- 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
Isso funciona para o Ruby on Rails 3.0 e deve ser suportado pela maioria das versões do Ruby on Rails:
request.env['REQUEST_URI']
Nenhuma das sugestões aqui no tópico me ajudou com tristeza, exceto aquela em que alguém disse que usou o depurador para encontrar o que procurava.
Eu criei algumas páginas de erro personalizadas em vez do padrão 404 e 500, mas request.url
terminou em /404
em vez do /non-existing-mumbo-jumbo
esperado.
O que eu precisava usar era
request.original_url
Se por parente, você quer dizer apenas sem o domínio, então olhe para request.domain
.
Você pode usar o método Ruby:
:root_url
que irá obter o caminho completo com o URL base:
localhost:3000/bla
(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)
No Rails 3 você pode usar
request.original_url
http://apidock.com/Rails/v3.2.8/ActionDispatch/Request/original_url
Trilhos 4.0
você pode usar request.original_url
, a saída será como dado abaixo exemplo
get "/articles?page=2"
request.original_url # => "http://www.example.com/articles?page=2"
se você quer ser específico, ou seja, você sabe o caminho que você precisa:
link_to current_path(@resource, :only_path => false), current_path(@resource)
Você pode usar
request.original_url
ou
"#{request.protocol}#{request.Host_with_port}"
para obter o URL atual.
Para Rails 3:
request.fullpath
For Rails 3.2 or Rails 4 Simplesmente entre desta forma "request.original_url" Referência: Original URL Method
For Rails 3 Como request.url é obsoleto. Podemos obter caminho absoluto concatenando
"#{request.protocol}#{request.Host_with_port}#{request.fullpath}"
Para trilhos 2
request.url
você pode usar qualquer um para o Rails 3.2:
request.original_url
or
request.env["HTTP_REFERER"]
or
request.env['REQUEST_URI']
Eu acho que vai funcionar em todos os lugares
"#{request.protocol}#{request.Host}:#{request.port}#{request.fullpath}"
request.env["REQUEST_URI"]
funciona no Rails 2.3.4 testado e não sabe sobre outras versões.
Para obter o URL da solicitação sem nenhum parâmetro de consulta.
def current_url_without_parameters
request.base_url + request.path
end
Você pode usar:
request.full_path
ou
request.url
Espero que isso resolva seu problema.
Felicidades
Você pode definir uma variável para URI.parse(current_url)
, não vejo esta proposta aqui ainda e funciona para mim.
Para Rails 3.xe acima:
#{request.protocol}#{request.Host_with_port}#{request.fullpath}
Para Rails 3.2 e acima:
request.original_url
Porque no Rails 3.2 e acima:
request.original_url = request.base_url + request.original_fullpath
Para mais informações, visite plese http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url
Rails 4
Controlador:
def absolute_url
request.base_url + request.original_fullpath
end
Action Mailer Alterações notáveis em 4.2 release :
link_to e url_para gerar URLs absolutos por padrão em modelos, não é mais necessário passar only_path: false. (Commit)
Visão:
Se você usar o sufixo _url
, o URL gerado será absoluto. Use _path
para obter um URL relativo.
<%= link_to "Home", root_url %>
Para mais detalhes, vá para:
http://blog.grepruby.com/2015/04/absolute-url-full-url-in-Rails-4.html
Para obter o URL absoluto, o que significa que o from the root
pode ser exibido assim
<%= link_to 'Edit', edit_user_url(user) %>
O auxiliar users_url gera uma URL que inclui o protocolo e o nome do host . O auxiliar users_path gera apenas a parte do caminho.
users_url: http://localhost/users
users_path: /users