2012-12-26 10 views
13

Miałem działające przekierowanie w moim routes.rb jak;Jak wykonać przekierowanie w routes.rb przekazując ciąg zapytania

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

Chcę teraz dodać ciąg kwerendy do tego tak, że np

/invoices?show=overdue 

zostanie przekierowany do

/dashboard?show=overdue 

Próbowałem kilka rzeczy. Najbliższy, jaki mam, jest;

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

co daje mi prawidłowy wynik, ale z oryginalnym adresem URL wciąż wyświetlanym w przeglądarce.

Jestem pewien, że brakuje mi czegoś bardzo prostego, ale nie widzę co.

Odpowiedz

16

Można użyć obiektu żądania w tym przypadku:

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

Dziękujemy za odpowiedź. Należy również pamiętać, że ten kod nie jest dobry ze strony SEO, ponieważ jeśli query_string będzie puste, to URL będzie wyglądał jak "...?" – woto

+1

W tym przypadku 'dopasuj"/faktury "=> przekierowanie {| p, żądanie | request.query_string.blank? ? "/ dashboard": "/dashboard?#{request.query_string}"} 'should do ... –

9

Najprostszym sposobem, aby to zrobić (przynajmniej w Rails 4) jest zrobić korzystać z trybu opcji dla przekierowania rozmowy ..

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

Spowoduje to TYLKO zmianę komponentu ścieżki i pozostawienie samych parametrów zapytania.

+0

Dziękujemy! Przeszedłem około 6 różnych postów SO, zanim znalazłem ten ostatni, prosty, który rozwiązał wszystkie moje problemy. – iamse7en

+0

Należy zauważyć, że to nie przekazuje params wyodrębnionych ze ścieżki w adresie URL, takich jak 'invoices /: id' –

+1

@ the_minted faktycznie można, po prostu za pomocą% {id}. dla przykładów 'get '/ invoices /: id' => redirect (ścieżka: '/ new_invoices /% {id}') – Urkle

Powiązane problemy