2012-08-05 61 views
2

我有一個用Rails 3編寫的搜索表單,當我查詢它時,只要我不在我的查詢中提到一點,一切都可以正常工作。例如:Rails 3給出了URL中的點路由錯誤

http://localhost:3000/en/job/search/q/test  - WORKS 
http://localhost:3000/en/job/search/q/test. - DOES NOT WORK 

URL與在終點處給出了一個

Routing Error: No route matches [GET] "/en/job/search/q/test. 

有誰知道我怎麼能解決這個問題?謝謝。

+2

默認情況下,Rails期望在點之後有一個':format'(例如js)。如果你想覆蓋請提供你的'routes.rb'。 – iltempo 2012-08-05 13:02:37

+0

這條路線的routes.rb文件是: 'R326 :: Application.routes.draw do scope'(:locale)'do match'job/search /(:param1 /:value1(/:param2 /:VALUE2 /(:參數3 /:值3 /(:param4 /:VALUE4 /(:param5 /:值5 /(:param6 /:value6 /(:param7 /:value7 /(:param8 /:value8 /(:param9/:value9 /(:param10 /:value10 /(:param11 /:value11 /(:param12 /:value12))))))))))))')>')')')''>'job#search' root:to => 'job#index' end end ' 我應該改變什麼來覆蓋這種行爲。使用POST請求並不是真正的選擇。 – 2012-08-05 18:30:35

回答

2

默認情況下,Rails將小數點右側的所有內容都解釋爲格式。您需要設置:限制

下面是關於這個問題的好文章:http://coding-journal.com/rails-3-routing-parameters-with-dots/

以下是應該可以幫助您解決問題了Rails API中的參考:

http://guides.rubyonrails.org/routing.html#specifying-constraints

http://guides.rubyonrails.org/routing.html#dynamic-segments

由於您傳遞字符串搜索作爲一個GET請求,您也可以考慮路線通配:http://guides.rubyonrails.org/routing.html#route-globbing

你的路線是這樣的:

match ":language/job/search/*query" 

,並在你的控制器,你會使用PARAMS得到的路徑值[]數組:

q = params[:query] 

請務必使用將此信息傳遞給ActiveRecord以避免SQL注入攻擊時的最佳實踐。

+0

我設法按照文章中的信息進行整理:http://coding-journal.com/rails-3-routing-parameters-with-dots/ – 2012-08-06 12:20:02

0

@iltempo說什麼。

此外,將搜索從使用GET請求切換到POST請求以使所有這些問題消失將是一個好主意。