2012-12-26 3 views
13

ho avuto un funzionamento redirect nel mio routes.rb in questo modo;Come faccio a fare un reindirizzamento di passaggio routes.rb sulla stringa di query

match "/invoices" => redirect("/dashboard") 

Ora voglio aggiungere una stringa di query per questo in modo che, per esempio,

/invoices?show=overdue 

verrà reindirizzati alla

/dashboard?show=overdue 

Ho provato diverse cose. Il più vicino che ho è;

match "/invoices?:string" => redirect("/dashboard?%{string}") 

che mi restituisce l'output corretto ma con l'URL originale ancora visualizzato nel browser.

sono sicuro che mi manca qualcosa piuttosto semplice, ma non riesco a vedere che cosa.

risposta

16

È possibile utilizzare richiesta oggetto in questo caso:

match "/invoices" => redirect{ |p, request| "/dashboard?#{request.query_string}" } 
+1

Grazie fornito la risposta. Sappi anche che questo codice non va bene dal lato SEO perché se query_string sarà vuoto, allora url avrà l'aspetto di "...?" – woto

+1

In questo caso 'match"/fatture "=> reindirizza {| p, request | request.query_string.blank? ? "/ dashboard": "/dashboard?#{request.query_string}"} 'dovrebbe fare ... –

9

Il modo più semplice per fare questo (almeno in Rails 4) è fare utilizzare la modalità opzioni per la chiamata di reindirizzamento ..

get '/invoices' => redirect(path: '/dashboard') 

Questo cambierà SOLO il componente del percorso e lascerà da solo i parametri della query.

+0

Grazie !!! Sono andato su circa 6 post SO diversi prima di trovare questo recente, semplice che risolveva tutti i miei problemi. – iamse7en

+0

Si noti che questo non è così avanti params che vengono estratti dal percorso nell'url come 'fatture /: id' –

+1

@the_minted in realtà è possibile, semplicemente utilizzando% {id}. per esempi 'get '/ fatture /: id' => redirect (percorso: '/ new_invoices /% {id}')' – Urkle