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

yka*_*ich 7 ruby ruby-on-rails http

我有一个表格的网址 http://www.example.com?foo=one&foo=two

我想要得到值的数组['one', 'two']foo,但params[:foo]只返回第一个值.

我知道如果我使用foo[]而不是foo在URL中,那么params[:foo]会给我所需的数组.

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

gtd*_*gtd 13

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

params = CGI.parse(request.query_string)
Run Code Online (Sandbox Code Playgroud)

这将给你你想要的东西,但请注意你不会得到任何Rails其他扩展来查询字符串解析,比如使用HashWithIndifferentAccess,所以你将不得不使用String而不是Symbol键.

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