Come ottengo l’attuale URL assoluto in Ruby on Rails?

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

request.request_uri restituisce solo l’URL relativo.

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.

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

Potresti usare url_for(:only_path => false)

AVVISO DI DEPRECAZIONE: l’ uso di #request_uri è deprecato . Utilizzare invece fullpath.

Se utilizzi Rails 3.2 o Rails 4 , dovresti utilizzare request.original_url per ottenere l’URL corrente.


La documentazione per il metodo è disponibile su http://api.rubyonrails.org/classs/ActionDispatch/Request.html#method-i-original_url, ma se sei curioso l’implementazione è:

 def original_url base_url + original_fullpath end 

È ansible aggiungere questo metodo current_url in ApplicationController per restituire l’URL corrente e consentire l’unione in altri parametri

 # 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 

Esempio di utilizzo:

 current_url --> http://... current_url(:page=>4) --> http://...&page=4 

Per Ruby on Rails 3:

 request.url request.host_with_port 

Ho avviato una sessione di debugger e ho interrogato l’object della richiesta:

 request.public_methods 

In Ruby on Rails 3.1.0.rc4:

  request.fullpath 

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

 root_url(:only_path => false) 
  url_for(params) 

E puoi aggiungere facilmente qualche nuovo parametro:

 url_for(params.merge(:tag => "lol")) 

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 possa aiutare!

Sembra che request_uri sia deprecato in Ruby on Rails 3.

 Using #request_uri is deprecated. Use fullpath instead. 

Funziona con Ruby on Rails 3.0 e dovrebbe essere supportato dalla maggior parte delle versioni di Ruby on Rails:

 request.env['REQUEST_URI'] 

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 

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 

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

Puoi usare il metodo ruby:

 :root_url 

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

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

In Rails 3 puoi usare

 request.original_url 

http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url

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" 

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

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

Per le rotaie 3:

request.fullpath

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}" 
 request.env["REQUEST_URI"] 

funziona su binari 2.3.4 testato e non conosce altre versioni.

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

 def current_url_without_parameters request.base_url + request.path end 

Puoi usare

 request.original_url 

o

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

per ottenere l’URL corrente.

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 

Puoi usare:

 request.full_path 

o

 request.url 

Spero che risolva il tuo problema.

Saluti

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

Per ottenere l’URL assoluto, il che significa che from the root può essere visualizzato in questo modo

 < %= link_to 'Edit', edit_user_url(user) %> 

L’helper users_url genera un URL che include il protocollo e il nome host. L’helper users_path genera solo la parte del percorso.

 users_url: http://localhost/users users_path: /users