2

当我查询它时,我有一个用 Rails 3 编写的搜索表单,只要我不在查询中添加一个点,一切都可以正常工作。例如:

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.

有谁知道我该如何解决这个问题?谢谢。

4

2 回答 2

2

默认情况下,Rails 将小数点右边的所有内容都解释为格式。您需要设置 :constraints

这是一篇关于这个主题的好文章: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

由于您在搜索中将字符串作为获取请求传递,因此您还可以考虑路由通配:http: //guides.rubyonrails.org/routing.html#route-globbing

您的路线将是这样的:

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

在您的控制器中,您将使用 params[] 数组从路由中获取值:

q = params[:query]

将其传递给 ActiveRecord 时一定要使用最佳实践,以避免 SQL 注入攻击。

于 2012-08-06T05:32:16.727 回答
0

@iltempo 说了什么。

此外,最好将搜索从使用 GET 请求切换为 POST 请求,以消除所有这些问题。

于 2012-08-05T14:29:27.237 回答