Ruby on rails 如何在Rails中解析URL查询中的多值字段
我有一个Ruby on rails 如何在Rails中解析URL查询中的多值字段,ruby-on-rails,ruby,http,Ruby On Rails,Ruby,Http,我有一个form的URLhttp://www.example.com?foo=one&foo=two 我想为foo获取一个值数组['one','two'],但是params[:foo]只返回第一个值 我知道如果我在URL中使用foo[]而不是foo,那么params[:foo]将为我提供所需的数组 但是,如果可能的话,我希望避免更改URL的结构,因为它的形式是作为客户机应用程序的规范提供的。有没有一种不更改参数名就获取所有值的好方法?您可以使用默认的Ruby CGI模块在Rails控制器中解析查
form的URLhttp://www.example.com?foo=one&foo=two
我想为foo
获取一个值数组['one','two']
,但是params[:foo]
只返回第一个值
我知道如果我在URL中使用foo[]
而不是foo
,那么params[:foo]
将为我提供所需的数组
但是,如果可能的话,我希望避免更改URL的结构,因为它的形式是作为客户机应用程序的规范提供的。有没有一种不更改参数名就获取所有值的好方法?您可以使用默认的Ruby CGI模块在Rails控制器中解析查询字符串,如下所示:
params = CGI.parse(request.query_string)
这将为您提供所需的内容,但请注意,您不会获得任何其他用于查询字符串解析的扩展,例如使用hashwithindepertaccess
,因此您必须使用字符串而不是符号键
另外,我不相信您可以用一行代码设置那样的参数,并覆盖默认的rails参数内容。根据您希望这种更改的广泛程度,您可能需要对内部进行一些修补或修改。但是,如果您想要进行全局更改,最快捷的方法是将其放入application.rb
中的before过滤器中,并使用一个新的实例变量,如@raw\u params我喜欢另一个答案中提到的CGI.parse(request.query\u string)解决方案。您可以这样做,将自定义解析的查询字符串合并到参数中:
params.merge!(CGI.parse(request.query_string).symbolize_keys)
很有魅力,谢谢。我只需要把它放在一个控制器的一个地方,所以我甚至不需要乱动params。自动符号化会让你的应用受到DoS攻击。Ruby从不垃圾收集符号实例,因此它们留在内存中,什么也不做,直到应用程序重新启动。@FrançoisBeausoleil-你有更详细解释这个问题的链接吗?在Ruby 1.9.2/Rails 3中,这仍然是一个问题吗?@matthugins-See。这个问题应该在2.2中解决。