如何从 Rails 中的 URL 获取查询字符串

是否有一种方法可以在 Rails 中获得传递的 URL 字符串中的查询字符串?

我想传递一个 URL 字符串:

http://www.foo.com?id=4&empid=6

我怎样才能得到 idempid

107076 次浏览

在 Ruby on Rails 控制器方法中,URL 参数可以在称为 params的散列中获得,其中的键是参数名,但是作为 Ruby“符号”(即。前面加冒号)。在你的例子中,params[:id]等于 4 params[:empid]等于 6

我建议你阅读一个很好的 Rails 教程,它应该包括像这样的基础知识。给你的一个例子——谷歌将会出现更多:

如果你在一个字符串中有一个 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"
Rack::Utils.parse_nested_query("a=2") #=> {"a" => "2"}

引自: 在 RubyonRails 中解析字符串就像解析查询字符串一样

像 Rails 控制器那样解析查询字符串。嵌套查询通常通过表单字段名称(如 lil guy: 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

vars = request.query_parameters
vars['id']
vars['empid']

等等。