Como posso obter o URL absoluto atual na minha visualização Ruby on Rails?
O request.request_uri
único retorna o URL relativo .
ruby-on-rails
ruby
url
Jakub Arnold
fonte
fonte
Respostas:
Para Rails 3.2 ou Rails 4+
Você deve usar
request.original_url
para obter o URL atual.Este método está documentado no método original_url , mas se você estiver curioso, a implementação é:
Para Rails 3:
Você pode escrever
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
, poisrequest.url
agora está obsoleto.Para Rails 2:
Você pode escrever em
request.url
vez derequest.request_uri
. Isso combina o protocolo (geralmente http: //) com o host e request_uri para fornecer o endereço completo.fonte
fullpath
NÃO inclui o protocolo / domínio / porta! Não é um URL absoluto!"http://#{request.host+request.fullpath}"
vai trabalhar ou de outra forma, (se a porta é importante)"http://#{request.host}:#{request.port+request.fullpath}"
"http://#{request.host}:#{request.port}#{request.fullpath}"
request.url
foi descontinuada? A solução proposta é apenas um longo caminho para dizer o querequest.url
já faz; a aplicação é simplesmente protocolo + host_with_port + fullpath ( github.com/rails/rails/blob/... )Eu acho que o método Ruby on Rails 3.0 é agora
request.fullpath
.fonte
Você poderia usar
url_for(only_path: false)
fonte
DEPRECAÇÃO AVISO: O uso de #request_uri foi descontinuado . Use o caminho completo.
fonte
request.uri
e isso já tem sido apontado várias vezes nesta questão, mas ... ok, graçasSe você estiver usando o Rails 3.2 ou o Rails 4 , use
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ê estiver curioso, a implementação é:
fonte
Você pode adicionar esse método current_url no ApplicationController para retornar a URL atual e permitir a mesclagem com outros parâmetros
Exemplo de uso:
fonte
url_for params.merge(:format => "PDF", :only_path => false)
link_to
você pode apenas usarparams.merge
e pular ourl_for
completamentePara Ruby on Rails 3:
Eu iniciei uma sessão de depurador e consultei o objeto de solicitação:
fonte
No Ruby on Rails 3.1.0.rc4:
fonte
fullpath
não fornece umabsolute URL
como o cartaz original solicitado.Eu precisava do URL do aplicativo, mas com o subdiretório. Eu usei:
fonte
E você pode adicionar facilmente algum novo parâmetro:
fonte
Eu acho que request.domain funcionaria, mas e se você estiver em um subdiretório como blah.blah.com? Algo assim poderia funcionar:
Altere os parâmetros com base na sua estrutura de caminho.
Espero que ajude!
fonte
Parece que
request_uri
está obsoleto no Ruby on Rails 3.fonte
Usando Ruby 1.9.3-p194 e Ruby on Rails 3.2.6:
Se request.fullpath não funcionar, tente request.env ["HTTP_REFERER"]
Aqui está a minha história abaixo.
Eu tive um problema semelhante ao detectar o URL atual (que é mostrado 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 pudesse funcionar corretamente em sua própria página e no histórico acumulado da página .
Caso eu use request.fullpath , ele retornará o caminho da última solicitação JavaScript, que definitivamente não é o URL que estou procurando.
Então, usei request.env ["HTTP_REFERER"] que armazena o URL da última solicitação recarregada.
Aqui está um trecho da parcial para tomar uma decisão
fonte
Isso funciona para o Ruby on Rails 3.0 e deve ser suportado pela maioria das versões do Ruby on Rails:
fonte
Nenhuma das sugestões aqui no tópico me ajudou tristemente, 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 dos 404 e 500 padrão, mas
request.url
terminei em/404
vez do esperado/non-existing-mumbo-jumbo
.O que eu precisava usar era
fonte
Se por parente, você quer dizer apenas sem o domínio, verifique
request.domain
.fonte
fonte
Você pode usar o método ruby:
que obterá o caminho completo com o URL base:
fonte
:root_url
o URL absoluto? Suponha que eu esteja usando algo parecidosome_method(:products_brand_url, brand: brand, entity_name: "brand")
esome_method
seja definido como `def some_method (route, opts = {}) end` Eu não quero que minha rota pareça -http://localhost:3000/brands/brand_name?&entity_name="brand"
. Quero que a rota pareçahttp://localhost:3000/brands/brand_name
. Eu só queroentity_name
que ele faça parte do hash dos opts e não como um parâmetro para o URL absoluto.root_url
.No Rails 3 você pode usar
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
fonte
você pode usar qualquer um para trilhos 3.2:
Eu acho que vai funcionar em todos os lugares
fonte
Rails 4.0
você pode usar
request.original_url
, a saída será conforme o exemplo abaixofonte
Para o Rails 3.2 ou Rails 4, basta entrar desta maneira "request.original_url" Referência: Método URL Original
Para Rails 3 Como request.url está obsoleto. Podemos obter um caminho absoluto concatenando
Para Rails 2
fonte
se você quer ser específico, ou seja, conhece o caminho que precisa:
fonte
Para trilhos 3:
fonte
funciona nos trilhos 2.3.4 testados e não conhece outras versões.
fonte
Para obter o URL da solicitação sem nenhum parâmetro de consulta.
fonte
Você pode usar
ou
para obter o URL atual.
fonte
Você pode usar:
ou
Espero que isso resolva seu problema.
Felicidades
fonte
Você pode definir uma variável como
URI.parse(current_url)
, ainda não vejo essa proposta aqui e funciona para mim.fonte
Para obter o URL absoluto, significa que
from the root
ele pode ser exibido assimO auxiliar users_url gera uma URL que inclui o protocolo e o nome do host. O ajudante users_path gera apenas a parte do caminho.
fonte