¿Cómo puedo obtener el actual URL absoluta en mi vista de Ruby on Rails?
El request.request_uri
único devuelve la URL relativa .
¿Cómo puedo obtener el actual URL absoluta en mi vista de Ruby on Rails?
El request.request_uri
único devuelve la URL relativa .
Respuestas:
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:
def original_url
base_url + original_fullpath
end
Puedes escribir "#{request.protocol}#{request.host_with_port}#{request.fullpath}"
, ya request.url
que ahora está en desuso.
Puedes escribir en request.url
lugar de request.request_uri
. Esto combina el protocolo (generalmente http: //) con el host y request_uri para darle la dirección completa.
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 que request.url
ya hace; la implementación es simplemente protocolo + host_with_port + fullpath ( github.com/rails/rails/blob/… )
Podrías usar url_for(only_path: false)
ADVERTENCIA DE DEPRECACIÓN: El uso de #request_uri está en desuso . Utilice fullpath en su lugar.
request.uri
y esto ya se ha señalado varias veces en esta pregunta, pero ... ok, gracias
Si 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:
def original_url
base_url + original_fullpath
end
Puede agregar este método current_url en ApplicationController para devolver la URL actual y permitir la fusión en otros 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
Ejemplo de uso:
current_url --> http://...
current_url(:page=>4) --> http://...&page=4
url_for params.merge(:format => "PDF", :only_path => false)
link_to
solo puede usar params.merge
y omitir el url_for
conjunto
En Ruby on Rails 3.1.0.rc4:
request.fullpath
fullpath
no proporciona un absolute URL
como el cartel original solicitado.
url_for(params)
Y puede agregar fácilmente algún parámetro nuevo:
url_for(params.merge(:tag => "lol"))
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:
<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>
Cambie los parámetros según su estructura de ruta.
¡Espero que ayude!
Parece que request_uri
está en desuso en Ruby on Rails 3.
Using #request_uri is deprecated. Use fullpath instead.
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.
- 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
Esto funciona para Ruby on Rails 3.0 y debería ser compatible con la mayoría de las versiones de Ruby on Rails:
request.env['REQUEST_URI']
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
request.original_url
Puedes usar el método ruby:
:root_url
que obtendrá la ruta completa con la URL base:
localhost:3000/bla
:root_url
para obtener la URL absoluta? Suponga que estoy usin algo así some_method(:products_brand_url, brand: brand, entity_name: "brand")
y some_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 ruta http://localhost:3000/brands/brand_name
. Solo quiero entity_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
request.original_url
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
Carriles 4.0
puede usar request.original_url
, la salida será como se muestra a continuación
get "/articles?page=2"
request.original_url # => "http://www.example.com/articles?page=2"
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
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
Para rieles 2
request.url
request.env["REQUEST_URI"]
funciona en rails 2.3.4 probado y no conoce otras versiones.
Puedes usar
request.original_url
o
"#{request.protocol}#{request.host_with_port}"
para obtener la URL actual.
Puedes usar:
request.full_path
o
request.url
Esperemos que resuelva tu problema.
Salud
Para obtener la URL absoluta, lo que significa que from the root
se puede mostrar así
<%= link_to 'Edit', edit_user_url(user) %>
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.
users_url: http://localhost/users
users_path: /users