Come posso ottenere l' URL assoluto corrente nella mia vista Ruby on Rails?
L' request.request_uriunico restituisce l' URL relativo .
Come posso ottenere l' URL assoluto corrente nella mia vista Ruby on Rails?
L' request.request_uriunico restituisce l' URL relativo .
Risposte:
Dovresti usare request.original_urlper ottenere l'URL corrente.
Questo metodo è documentato nel 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.urlora è deprecato.
Puoi scrivere request.urlinvece di request.request_uri. Questo combina il protocollo (di solito http: //) con l'host e request_uri per fornire l'indirizzo completo.
fullpathNON include il protocollo / dominio / porta! Non è un URL assoluto!
"http://#{request.host+request.fullpath}"funzionerà o meno, (se il porto è importante)"http://#{request.host}:#{request.port+request.fullpath}"
"http://#{request.host}:#{request.port}#{request.fullpath}"
request.urlè obsoleto? La soluzione proposta è solo un lungo modo di dire ciò che request.urlgià fa; l'implementazione è semplicemente protocollo + host_with_port + fullpath ( github.com/rails/rails/blob/… )
Puoi usare url_for(only_path: false)
ATTENZIONE: L' utilizzo di #request_uri è deprecato . Usa invece fullpath.
request.urie questo è già stato sottolineato più volte in questa domanda, ma ... ok, grazie
Se stai usando Rails 3.2 o Rails 4 dovresti usare request.original_urlper ottenere l'URL corrente.
La documentazione per il metodo è disponibile all'indirizzo http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url ma se sei curioso l'implementazione è:
def original_url
base_url + original_fullpath
end
È possibile 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
url_for params.merge(:format => "PDF", :only_path => false)
link_topuoi semplicemente usare params.mergee saltare del url_fortutto
In Ruby on Rails 3.1.0.rc4:
request.fullpath
fullpathnon fornisce un absolute URLcome il poster originale richiesto.
url_for(params)
E puoi facilmente aggiungere alcuni nuovi parametri:
url_for(params.merge(:tag => "lol"))
Penso che request.domain funzionerebbe, ma cosa succede se ti trovi in una sottodirectory 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 aiuti!
Sembra che request_urisia deprecato in Ruby on Rails 3.
Using #request_uri is deprecated. Use fullpath instead.
Utilizzando Ruby 1.9.3-p194 e Ruby on Rails 3.2.6:
Se request.fullpath non funziona per te, prova request.env ["HTTP_REFERER"]
Ecco la mia storia qui sotto.
Ho riscontrato un problema simile con il rilevamento dell'URL corrente (che viene mostrato nella barra degli indirizzi per l'utente nel suo browser) per le pagine cumulative che combinano informazioni provenienti da controller diversi, 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 controller / parziali diversi (senza ricaricare).
Il problema era impostare il percorso corretto per il pulsante Indietro in ogni elemento dell'elenco in modo che il pulsante Indietro potesse funzionare correttamente sia nella propria pagina che nella cronologia cumulativa delle pagine .
Nel caso in cui utilizzo request.fullpath , restituisce il percorso dell'ultima richiesta JavaScript che non è sicuramente l'URL che sto cercando.
Quindi 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
Questo funziona per Ruby on Rails 3.0 e dovrebbe essere supportato dalla maggior parte delle versioni di Ruby on Rails:
request.env['REQUEST_URI']
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 sono request.urlterminate /404invece del previsto /non-existing-mumbo-jumbo.
Quello che dovevo usare era
request.original_url
Puoi usare il metodo ruby:
:root_url
che otterrà il percorso completo con l'URL di base:
localhost:3000/bla
:root_urlper ottenere l'url assoluto? Supponiamo che io stia usando qualcosa del genere some_method(:products_brand_url, brand: brand, entity_name: "brand")ed some_methodè definito come `def some_method (route, opts = {}) end` Non voglio che il mio percorso assomigli - http://localhost:3000/brands/brand_name?&entity_name="brand". Voglio che il percorso sia simile http://localhost:3000/brands/brand_name. Voglio solo che entity_namefaccia parte dell'hash di opts e non come parametro dell'URL assoluto.
root_url.
In Rails 3 puoi usare
request.original_url
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
Rotaie 4.0
è possibile utilizzare request.original_url, l'output sarà come indicato nell'esempio seguente
get "/articles?page=2"
request.original_url # => "http://www.example.com/articles?page=2"
Per Rails 3.2 o Rails 4 Ottenere semplicemente in questo modo "request.original_url" Riferimento: Metodo URL originale
Per Rails 3 Poiché request.url è obsoleto. È possibile ottenere il percorso assoluto concatenando
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
Per binari 2
request.url
request.env["REQUEST_URI"]
funziona su binari 2.3.4 testati e non conosce altre versioni.
Puoi usare entrambi
request.original_url
o
"#{request.protocol}#{request.host_with_port}"
per ottenere l'URL corrente.
Puoi usare:
request.full_path
o
request.url
Spero che risolva il tuo problema.
Saluti
Per ottenere l'URL assoluto, il che significa che from the rootpuò 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