Come posso ottenere l’attuale URL assoluto nella mia vista Ruby on Rails?
request.request_uri
restituisce solo l’URL relativo.
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
Puoi scrivere "#{request.protocol}#{request.host_with_port}#{request.fullpath}"
, poiché request.url
è ora deprecato.
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