tutorial rails examples and ruby-on-rails ruby url

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.



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 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 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.