我的网址格式为http://www.example.com?foo=one&foo=two
我想为['one', 'two']
获取一系列值foo
,但params[:foo]
只返回第一个值。
我知道如果我在网址中使用了foo[]
而不是foo
,那么params[:foo]
会为我提供所需的数组。
但是,我希望尽可能避免更改URL的结构,因为它的表单作为规范提供给客户端应用程序。是否有一种很好的方法来获取所有值而不更改参数名称?
答案 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)