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

发布于 2025-01-03 01:26:19 字数 588 浏览 1 评论 0原文

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

该标准规定了用户如何访问基因组的多个区域(或任何其他生物区域) data-source)使用查询字符串 /features?segment=1:1,999;segment=2:100,1000,其中冒号之前的数字是染色体,其他两个数字是 start 和染色体上的末端位置。

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

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

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

I'm currently working on implementing the Distributed Annotation System-standard for our project openSNP.org, however, I've come across a problem with query strings

The standard prescribes how a user can access multiple areas of a genome (or any other biological data-source) using the query string /features?segment=1:1,999;segment=2:100,1000, where the number before the colon is the chromosome and the other two numbers are start and end-positions on the chromosome.

Unlimited segment=X:a,b strings are allowed so that a user can have a look at different positions and chromosomes using just one query.

The problem I have with Rails is that this query string doesn't work out-of-the-box with the params-array - after all, I always have the same key and the last key always overwrites the previous one, so that in the end, I have only "segment" => "2:100,1000" in my params-array, "segment" => "1:1,999" gets overwritten.

I've thought of using JavaScript to change the query string before it's passed to the controller, but the view used is basic XML and implementing JavaScript seems like overkill in this situation. Is there any way to access the query string in Rails before the params-array is created so that I can simply replace all "segment"s by some counter, or just kick out all "segment"s and keep the coordinates?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

左耳近心 2025-01-10 01:26:19

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 请求对象获取原始查询字符串code>,然后使用 CGI.parse 来处理更像您之后的事情:

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

Rails uses Rack::Utils.parse_nested_query which handles query strings in the way you've seen:

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

However, you can get the raw query string from the Rails request object using request.query_string, and then use CGI.parse which handles things more like you're after:

>> CGI.parse "segment=1:1,999;segment=2:100,1000"
=> {"segment"=>["1:1,999", "2:100,1000"]} 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文