【发布时间】:2011-11-11 02:42:33
【问题描述】:
有没有办法在 Rails 中通过 URL 字符串获取查询字符串?
我想传递一个 URL 字符串:
http://www.foo.com?id=4&empid=6
如何获得id 和empid?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3
有没有办法在 Rails 中通过 URL 字符串获取查询字符串?
我想传递一个 URL 字符串:
http://www.foo.com?id=4&empid=6
如何获得id 和empid?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3
如果字符串中有 URL,则使用 URI 和 CGI 将其分开:
url = 'http://www.example.com?id=4&empid=6'
uri = URI.parse(url)
params = CGI.parse(uri.query)
# params is now {"id"=>["4"], "empid"=>["6"]}
id = params['id'].first
# id is now "4"
这些东西请使用标准库,不要尝试用正则表达式自己做。
另见下方 Quv 对Rack::Utils.parse_query 的评论。
参考资料:
更新:这些天我可能会使用Addressable::Uri 而不是标准库中的URI:
url = Addressable::URI.parse('http://www.example.com?id=4&empid=6')
url.query_values # {"id"=>"4", "empid"=>"6"}
id = url.query_values['id'] # "4"
empid = url.query_values['empid'] # "6"
【讨论】:
Array 的值。或者,我们可以使用 Rack::Utils.parse_query(URI(url).query) 之类的东西。
params 方法没有任何关系。
vars = request.query_parameters
vars['id']
vars['empid']
等等。
【讨论】:
request,就像一个控制器。
在 Ruby on Rails 控制器方法中,URL 参数在名为 params 的哈希中可用,其中的键是参数名称,但作为 Ruby“符号”(即以冒号为前缀)。因此,在您的示例中,params[:id] 将等于 4,params[:empid] 将等于 6。
我建议阅读一个很好的 Rails 教程,它应该涵盖这样的基础知识。 Here 的一个例子 - 谷歌会出现更多:
【讨论】:
Rack::Utils.parse_nested_query("a=2") #=> {"a" => "2"}
引用自: Parse a string as if it were a querystring in Ruby on Rails
以 Rails 控制器的方式解析查询字符串。嵌套查询,通常通过像这个 lil 家伙这样的表单字段名称:name="awesome[beer][chips]" # => "?awesome%5Bbeer%5D%5Bchips%5D=cool",将“切片和切块”变成一个很棒的哈希:{"awesome"=>{"beer"=>{"chips"=>nil}}}
http://rubydoc.info/github/rack/rack/master/Rack/Utils.parse_nested_query https://github.com/rack/rack/blob/master/lib/rack/utils.rb#L90
【讨论】: