2013-10-23 36 views
10

我有一個問題,最近控制器的名稱改變了。Rails路由重定向查詢字符串

我改變了路線文件,以接受使用舊控制器的名義接聽電話,爲人們使用書籤引用舊名稱:

get '/old/about', to: redirect('/new/about') 
get '/old/report/:client', to: redirect('/new/report/%{client}') 
get '/old/:sub_path', to: redirect('/new/%{sub_path}') 

工作正常。但對於查詢字符串的調用,它會阻止它到/ report/200。例如:

/老/報告/ 200 = C_ID 257 &末=二○一三年十月一十九日& NUM_RESULTS個= 294540 &開始= 2013年10月13日

它削減網址:

old/report/200

並且由於缺少參數而顯示錯誤。你知道我能做什麼嗎? (我認爲:路線中的sub_path行會有幫助,但不會):(

+1

可能重複:http://stackoverflow.com/questions/14039181 /我該怎麼做 - 重定向在路由 - rb-passing-on-the-query-string –

+0

我想你可以對,讓我看看,非常感謝! – Alejandra

回答

11

Matt提到的問題幫助我找出答案(非常感謝!)。對於我的具體情況,這有點不同。林留下爲我工作以備將來參考答案

match "/old/report/:client" => redirect{ |params, request| "/new/report/#{params[:client]}?#{request.query_string}" } 
+0

這對我非常有幫助 - 感謝您回來發佈它。 – duma

+0

我會稍微修改一下,以檢查request.query_string作爲當前的解決方案是否總是添加'?'至底部。 –

1

大廈亞歷杭德拉的回答,更詳細的,但沒有?如果沒有查詢字符串:

get "/old/report/:client", to: redirect{ |params, request| ["/new/report/#{params[:client]}", request.query_string.presence].compact.join('?') } 

所以/old/report/:client?with=param將成爲/new/report/:client?with=param, 和/old/report/:client將變成/new/report/:client