当存在相同的密钥时,在Rails中查询字符串操作

时间:2012-02-08 00:39:29

标签: ruby-on-rails ruby query-string

我正在为我们的项目openSNP.org实施分布式注释系统标准,但是,我遇到了查询字符串的问题

该标准规定了用户如何使用查询字符串/特征访问基因组(或任何其他生物数据源)的多个区域?segment = 1:1,999; segment = 2:100,1000,其中之前的数字结肠是染色体,另外两个数字是染色体上的起始和终止位置。

无限段= X:允许使用b字符串,以便用户只需使用一个查询即可查看不同的位置和染色体。

我对Rails的问题是这个查询字符串不能与params-array一起开箱即用 - 毕竟,我总是有相同的键,最后一个键总是覆盖前一个键,所以最后,我只有“段”=>我的参数数组中的“2:100,1000”,“segment”=> “1:1,999”被覆盖。

我曾想过在将查询字符串传递给控制器​​之前使用JavaScript来更改查询字符串,但是使用的视图是基本的XML,在这种情况下实现JavaScript似乎有些过分。有没有办法在创建params-array之前访问Rails中的查询字符串,以便我可以简单地用一些计数器替换所有“段”,或者只是踢出所有“段”并保持坐标?

1 个答案:

答案 0 :(得分:4)

Rails使用Rack::Utils.parse_nested_query以您看到的方式处理查询字符串:

>> Rack::Utils.parse_nested_query "segment=1:1,999;segment=2:100,1000"
=> {"segment"=>"2:100,1000"} 

但是,您可以使用request.query_string从Rails请求对象获取原始查询字符串,然后使用CGI.parse来处理更像您之后的事情:

>> CGI.parse "segment=1:1,999;segment=2:100,1000"
=> {"segment"=>["1:1,999", "2:100,1000"]}