examples - ¿Cómo obtengo la URL absoluta actual en Ruby on Rails?
ruby and rails documentation (30)
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:
def original_url
base_url + original_fullpath
end
Para los carriles 3:
Puede escribir "#{request.protocol}#{request.host_with_port}#{request.fullpath}"
, ya que request.url
ahora está en desuso.
Para los carriles 2:
Puede escribir 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.
¿Cómo puedo obtener la URL absoluta actual en mi vista de Ruby on Rails?
El request.request_uri
solo devuelve la URL relativa.
ADVERTENCIA DE DEPRECATION: El uso de #request_uri está en desuso . Utilice fullpath en su lugar.
Creo que el método Ruby on Rails 3.0 ahora es request.fullpath
.
Creo que request.domain funcionaría, pero ¿qué pasa si estás en un directorio secundario como blah.blah.com? Algo como esto podría funcionar:
<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters[''controller''] + "/" + request.path_parameters[''action''] %>
Cambia los parámetros basados en tu estructura de ruta.
¡Espero que ayude!
En Rails 3 puedes usar
request.original_url
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
En Ruby on Rails 3.1.0.rc4:
request.fullpath
Esto funciona para Ruby on Rails 3.0 y debe ser compatible con la mayoría de las versiones de Ruby on Rails:
request.env[''REQUEST_URI'']
Necesitaba la URL la aplicación pero con el subdirectorio. Solía:
root_url(:only_path => false)
Ninguna de las sugerencias aquí contenidas en el hilo me ayudó con tristeza, excepto cuando alguien dijo que usó el depurador para encontrar lo que buscaba.
He creado algunas páginas de error personalizadas en lugar de las estándar 404 y 500, pero request.url
terminó en /404
lugar de la esperada /non-existing-mumbo-jumbo
.
Lo que necesitaba usar era
request.original_url
Para Ruby on Rails 3:
request.url
request.host_with_port
Encendí una sesión de depurador y consulté el objeto de solicitud:
request.public_methods
Para los carriles 3:
request.fullpath
Para obtener la URL absoluta, lo que significa que from the root
se puede mostrar de esta manera
<%= link_to ''Edit'', edit_user_url(user) %>
El helper users_url genera una URL que incluye el protocolo y el nombre del host. El helper users_path genera solo la parte de la ruta.
users_url: http://localhost/users
users_path: /users
Para obtener la URL de la solicitud sin ningún parámetro de consulta.
def current_url_without_parameters
request.base_url + request.path
end
Parece que request_uri
está en desuso en Ruby on Rails 3.
Using #request_uri is deprecated. Use fullpath instead.
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
Puede establecer una variable en URI.parse(current_url)
, no veo esta propuesta aquí todavía y funciona para mí.
Puedes usar url_for(:only_path => false)
Puedes usar cualquiera de los rieles 3.2:
request.original_url
or
request.env["HTTP_REFERER"]
or
request.env[''REQUEST_URI'']
Creo que funcionará en todas partes.
"#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}"
Puedes usar el método rubí:
:root_url
que obtendrá la ruta completa con url base:
localhost:3000/bla
Puedes usar:
request.full_path
o
request.url
Esperemos que resuelva tu problema.
Aclamaciones
Si está usando Rails 3.2 o Rails 4 , debe usar request.original_url
para obtener la URL actual.
La documentación del 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
Si por familiar, te refieres a solo sin el dominio, entonces busca en request.domain
.
Si quieres ser específico, es decir, sabes el camino que necesitas:
link_to current_path(@resource, :only_path => false), current_path(@resource)
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.
Tuve un problema similar con la detección de la URL actual (que se muestra en la barra de direcciones para el usuario en su navegador) para las 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 fue establecer la ruta correcta para el botón Atrás en cada elemento de la lista para que el botón Atrás funcione correctamente tanto en su propia página como en el historial de páginas acumulativo.
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.
Así que utilicé request.env ["HTTP_REFERER"] que almacena la URL de la última solicitud recargada.
Aquí 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
Usted puede usar
request.original_url
o
"#{request.protocol}#{request.host_with_port}"
para obtener la URL actual.
Carriles 4.0
puede usar request.original_url
, el resultado 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 de URL original
Para Rails 3, ya que request.url está en desuso. Podemos obtener una ruta absoluta concatenando
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
Para rieles 2
request.url
url_for(params)
Y puedes agregar fácilmente algún nuevo parámetro:
url_for(params.merge(:tag => "lol"))
(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)
request.env["REQUEST_URI"]
Trabaja en rieles 2.3.4 probado y no se conocen otras versiones.