如何从Rails中的URL查询中解析多值字段

时间:2009-04-15 18:27:48

标签: ruby-on-rails ruby http

我的网址格式为http://www.example.com?foo=one&foo=two

我想为['one', 'two']获取一系列值foo,但params[:foo]只返回第一个值。

我知道如果我在网址中使用了foo[]而不是foo,那么params[:foo]会为我提供所需的数组。

但是,我希望尽可能避免更改URL的结构,因为它的表单作为规范提供给客户端应用程序。是否有一种很好的方法来获取所有值而不更改参数名称?

2 个答案:

答案 0 :(得分:13)

您可以使用默认的Ruby CGI模块来解析Rails控制器中的查询字符串,如下所示:

params = CGI.parse(request.query_string)

这将为您提供所需的内容,但请注意,您不会获得任何Rails其他扩展来查询字符串解析,例如使用HashWithIndifferentAccess,因此您将不得不使用String而不是Symbol键。

另外,我不相信你可以用一行设置这样的参数并覆盖默认的rails参数内容。根据您希望此更改的广泛程度,您可能需要修补或修改内部结构。但是,如果您想进行全局更改,那么快速的做法就是将其放在application.rb中的前置过滤器中,并使用新的实例var @raw_params

答案 1 :(得分:2)

我喜欢另一个答案中提到的CGI.parse(request.query_string)解决方案。您可以这样做将自定义解析的查询字符串合并为params:

params.merge!(CGI.parse(request.query_string).symbolize_keys)