2011-02-09 9 views

risposta

43

request.path dovrebbe restituire quello che stai cercando se non sei preoccupato per il nome host. In caso contrario, si potrebbe provare:

url_for(:only_path => false, :overwrite_params=>nil) 
+1

ho anche eseguito nel problema parametri ricorsive, '/ regolatore/action? Param = 1? Param = 2? Param = 3', ma il request.path lavorato eccellente per me. –

+0

Il problema con il metodo precedente è che se ci sono più percorsi per lo stesso tipo di risorsa (per esempio per una pubblicazione in cui alcune cose sono etichettate "/ news/post-name" e altre "/ nome-blog/nome-cognome"), quindi si potrebbe ottenere il percorso sbagliato indietro. – thekingoftruth

+0

@thekingoftruth È vero, ma verrà utilizzata la route con la priorità più alta, quindi assicurati di ordinarli correttamente. – tadman

8

Io uso il seguente:

request.original_url.split('?').first 

E non rigenera il percorso, e quindi si dà esattamente l'URL che l'utente finale vede nel proprio browser, meno di query parametri.

+0

Bello! Anche il terser 'request.url.split ('?'). First' ha funzionato per me. – Franco

+0

@Franco Credo che 'request.url' sia deprecato, ma non ne sono sicuro. – thekingoftruth

+1

Questo è più flessibile, in quanto può funzionare anche con 'request.referrer'. – steel

8

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

def current_url_without_parameters 
    request.base_url + request.path 
end