2012-08-05 60 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请求以使所有这些问题消失将是一个好主意。