【问题标题】:Query string manipulation in Rails when identical keys are present存在相同键时在 Rails 中查询字符串操作
【发布时间】:2012-02-08 00:39:28
【问题描述】:

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

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

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

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

我曾想过在查询字符串被传递到控制器之前使用 JavaScript 来更改它,但使用的视图是基本的 XML,在这种情况下实现 JavaScript 似乎有点矫枉过正。有什么方法可以在创建 params-array 之前访问 Rails 中的查询字符串,以便我可以简单地用某个计数器替换所有“段”,或者只是踢出所有“段”并保留坐标?

【问题讨论】:

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


    【解决方案1】:

    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"]} 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 2011-05-06
      相关资源
      最近更新 更多