Come posso ottenere l' URL assoluto corrente nella mia vista Ruby on Rails?
L' request.request_uri
unico restituisce l' URL relativo .
Come posso ottenere l' URL assoluto corrente nella mia vista Ruby on Rails?
L' request.request_uri
unico restituisce l' URL relativo .
Risposte:
Dovresti usare request.original_url
per 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.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 fornire l'indirizzo completo.
fullpath
NON 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.url
già 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.uri
e 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_url
per 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_to
puoi semplicemente usare params.merge
e saltare del url_for
tutto
In Ruby on Rails 3.1.0.rc4:
request.fullpath
fullpath
non fornisce un absolute URL
come 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_uri
sia 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.url
terminate /404
invece 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_url
per 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_name
faccia 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 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