¿Cómo puedo obtener el actual URL absoluta en mi vista de Ruby on Rails?
El request.request_uri
único devuelve la URL relativa .
ruby-on-rails
ruby
url
Jakub Arnold
fuente
fuente
Respuestas:
Para Rails 3.2 o Rails 4+
Debe usar
request.original_url
para obtener la URL actual.Este método está documentado en el método original_url , pero si tiene curiosidad, la implementación es:
Para rieles 3:
Puedes escribir
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
, yarequest.url
que ahora está en desuso.Para rieles 2:
Puedes escribir en
request.url
lugar derequest.request_uri
. Esto combina el protocolo (generalmente http: //) con el host y request_uri para darle la dirección completa.fuente
fullpath
NO incluye el protocolo / dominio / puerto! ¡No es una URL absoluta!"http://#{request.host+request.fullpath}"
funcionará o no, (si el puerto es importante)"http://#{request.host}:#{request.port+request.fullpath}"
"http://#{request.host}:#{request.port}#{request.fullpath}"
request.url
está en desuso? La solución propuesta es solo un largo camino para decir lo querequest.url
ya hace; la implementación es simplemente protocolo + host_with_port + fullpath ( github.com/rails/rails/blob/… )Creo que el método Ruby on Rails 3.0 es ahora
request.fullpath
.fuente
Podrías usar
url_for(only_path: false)
fuente
ADVERTENCIA DE DEPRECACIÓN: El uso de #request_uri está en desuso . Utilice fullpath en su lugar.
fuente
request.uri
y esto ya se ha señalado varias veces en esta pregunta, pero ... ok, graciasSi usa Rails 3.2 o Rails 4 , debe usar
request.original_url
para obtener la URL actual.La documentación para el método se encuentra en http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url, pero si tiene curiosidad, la implementación es:
fuente
Puede agregar este método current_url en ApplicationController para devolver la URL actual y permitir la fusión en otros parámetros
Ejemplo de uso:
fuente
url_for params.merge(:format => "PDF", :only_path => false)
link_to
solo puede usarparams.merge
y omitir elurl_for
conjuntoPara Ruby on Rails 3:
Inicié una sesión de depurador y consulté el objeto de solicitud:
fuente
En Ruby on Rails 3.1.0.rc4:
fuente
fullpath
no proporciona unabsolute URL
como el cartel original solicitado.Necesitaba la URL de la aplicación pero con el subdirectorio. Solía:
fuente
Y puede agregar fácilmente algún parámetro nuevo:
fuente
Creo que request.domain funcionaría, pero ¿qué pasa si estás en un subdirectorio como blah.blah.com? Algo como esto podría funcionar:
Cambie los parámetros según su estructura de ruta.
¡Espero que ayude!
fuente
Parece que
request_uri
está en desuso en Ruby on Rails 3.fuente
Usando Ruby 1.9.3-p194 y Ruby on Rails 3.2.6:
Si request.fullpath no funciona para usted, intente request.env ["HTTP_REFERER"]
Aquí está mi historia a continuación.
Tengo un problema similar al detectar la URL actual (que se muestra en la barra de direcciones del usuario en su navegador) para páginas acumulativas que combinan información de diferentes controladores, por ejemplo,
http://localhost:3002/users/1/history/issues
.El usuario puede cambiar a diferentes listas de tipos de problemas. Todas esas listas se cargan a través de Ajax desde diferentes controladores / parciales (sin recargar).
El problema era establecer la ruta correcta para el botón Atrás en cada elemento de la lista para que el botón Atrás pudiera funcionar correctamente tanto en su propia página como en el historial acumulativo de la página .
En caso de que use request.fullpath , devuelve la ruta de la última solicitud de JavaScript, que definitivamente no es la URL que estoy buscando.
Entonces utilicé request.env ["HTTP_REFERER"] que almacena la URL de la última solicitud recargada.
Aquí hay un extracto del parcial para tomar una decisión.
fuente
Esto funciona para Ruby on Rails 3.0 y debería ser compatible con la mayoría de las versiones de Ruby on Rails:
fuente
Ninguna de las sugerencias aquí en el hilo me ayudó tristemente, excepto la que alguien dijo que usó el depurador para encontrar lo que buscaba.
Creé algunas páginas de error personalizadas en lugar de las estándar 404 y 500, pero
request.url
terminé en/404
lugar de lo esperado/non-existing-mumbo-jumbo
.Lo que necesitaba usar era
fuente
Si por pariente te refieres solo sin el dominio, entonces busca
request.domain
.fuente
fuente
Puedes usar el método ruby:
que obtendrá la ruta completa con la URL base:
fuente
:root_url
para obtener la URL absoluta? Suponga que estoy usin algo asísome_method(:products_brand_url, brand: brand, entity_name: "brand")
ysome_method
se define como `def some_method (route, opts = {}) end` No quiero que mi ruta se vea como -http://localhost:3000/brands/brand_name?&entity_name="brand"
. Quiero que se vea la rutahttp://localhost:3000/brands/brand_name
. Solo quieroentity_name
que sea parte del hash de opts y no como un parámetro para la url absoluta.root_url
.En Rails 3 puedes usar
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
fuente
Puedes usar cualquiera de los rieles 3.2:
Creo que funcionará en todas partes
fuente
Carriles 4.0
puede usar
request.original_url
, la salida será como se muestra a continuaciónfuente
Para Rails 3.2 o Rails 4 Simplemente obtenga de esta manera "request.original_url" Referencia: Método URL original
Para Rails 3 Como request.url está en desuso, podemos obtener una ruta absoluta concatenando
Para rieles 2
fuente
si quieres ser específico, es decir, conoces el camino que necesitas:
fuente
Para rieles 3:
fuente
funciona en rails 2.3.4 probado y no conoce otras versiones.
fuente
Para obtener la URL de solicitud sin ningún parámetro de consulta.
fuente
Puedes usar
o
para obtener la URL actual.
fuente
Puedes usar:
o
Esperemos que resuelva tu problema.
Salud
fuente
Puede configurar una variable para
URI.parse(current_url)
, todavía no veo esta propuesta aquí y funciona para mí.fuente
Para obtener la URL absoluta, lo que significa que
from the root
se puede mostrar asíEl ayudante users_url genera una URL que incluye el protocolo y el nombre de host. El ayudante users_path genera solo la parte de la ruta.
fuente