unprocessable_entity Come ottengo l'attuale URL assoluto in Ruby on Rails?




ruby rails scope (24)

Per Ruby on Rails 3:

request.url
request.host_with_port

Ho avviato una sessione di debugger e ho interrogato l'oggetto della richiesta:

request.public_methods

Come posso ottenere l'attuale URL assoluto nella mia vista Ruby on Rails?

request.request_uri restituisce solo l'URL relativo.


Sembra che request_uri sia deprecato in Ruby on Rails 3.

Using #request_uri is deprecated. Use fullpath instead.

Per ottenere l'URL della richiesta senza parametri di query.

def current_url_without_parameters
  request.base_url + request.path
end

Nessuno dei suggerimenti qui nel thread mi ha aiutato tristemente, tranne quello in cui qualcuno ha detto che ha usato il debugger per trovare quello che cercava.

Ho creato alcune pagine di errore personalizzate invece degli standard 404 e 500, ma request.url terminava in /404 invece del previsto /non-existing-mumbo-jumbo .

Quello che dovevo usare era

request.original_url

(url_for(:only_path => false) == "/" )? root_url : url_for(:only_path => false)

Penso che request.domain funzionerebbe, ma cosa succede se ti trovi in ​​una sottocartella come blah.blah.com? Qualcosa del genere potrebbe funzionare:

<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>

Modifica i parametri in base alla struttura del tuo percorso.

Spero che sia d'aiuto!


Per Rails 3.2 o Rails 4 Semplicemente ottenere in questo modo "request.original_url" Riferimento: Metodo URL originale

Per Rails 3 As request.url è deprecato. Possiamo ottenere il percorso assoluto concatenando

"#{request.protocol}#{request.host_with_port}#{request.fullpath}"

Per Rails 2

request.url

Se per parentela, intendi solo senza il dominio, quindi controlla request.domain .


Puoi usare:

request.full_path

o

request.url

Spero che risolva il tuo problema.

Saluti


puoi usare uno qualsiasi per le rotaie 3.2:

request.original_url
or
request.env["HTTP_REFERER"]
or
request.env['REQUEST_URI']

Penso che funzionerà ovunque

"#{request.protocol}#{request.host}:#{request.port}#{request.fullpath}"

Penso che il metodo Ruby on Rails 3.0 sia ora request.fullpath .



request.env["REQUEST_URI"]

funziona su binari 2.3.4 testato e non conosce altre versioni.



Per Rails 3.2 o Rails 4+

Dovresti utilizzare request.original_url per ottenere l'URL corrente.

Questo metodo è documentato al metodo original_url , ma se sei curioso, l'implementazione è:

def original_url
  base_url + original_fullpath
end

Per Rails 3:

Puoi scrivere "#{request.protocol}#{request.host_with_port}#{request.fullpath}" , poiché request.url è ora deprecato.

Per Rails 2:

Puoi scrivere request.url invece di request.request_uri . Questo combina il protocollo (di solito http: //) con l'host e request_uri per fornirti l'indirizzo completo.


Puoi usare il metodo ruby:

:root_url

che otterrà il percorso completo con l'url di base:

localhost:3000/bla

Potresti usare url_for(:only_path => false)


Per le rotaie 3:

request.fullpath



Utilizzo di Ruby 1.9.3-p194 e Ruby on Rails 3.2.6:

Se request.fullpath non funziona, prova request.env ["HTTP_REFERER"]

Ecco la mia storia qui sotto.

Ho riscontrato un problema analogo con il rilevamento dell'URL corrente (mostrato nella barra degli indirizzi dell'utente nel suo browser) per le pagine cumulative che combinano le informazioni provenienti da diversi controller, ad esempio http://localhost:3002/users/1/history/issues .

L'utente può passare a diversi elenchi di tipi di problemi. Tutti questi elenchi vengono caricati tramite Ajax da diversi controller / parziali (senza ricaricare).

Il problema era impostare il percorso corretto per il pulsante Indietro in ciascun elemento dell'elenco, in modo che il pulsante Indietro potesse funzionare correttamente sia nella sua pagina che nella cronologia delle pagine cumulative.

Nel caso in cui io usi request.fullpath , restituisce il percorso dell'ultima richiesta JavaScript che non è sicuramente l'URL che sto cercando.

Così ho usato request.env ["HTTP_REFERER"] che memorizza l'URL dell'ultima richiesta ricaricata.

Ecco un estratto dal parziale per prendere una decisione

- 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

Avevo bisogno URL dell'applicazione ma con la sottodirectory. Ero solito:

root_url(:only_path => false)

Rails 4.0

puoi usare request.original_url , l'output sarà come mostrato di seguito

get "/articles?page=2"

request.original_url # => "http://www.example.com/articles?page=2"

Puoi impostare una variabile su URI.parse(current_url) , non vedo ancora questa proposta qui e funziona per me.


se vuoi essere specifico, nel senso, conosci il percorso che ti serve:

link_to current_path(@resource, :only_path => false), current_path(@resource)




url