如何从Rails中的URL获取查询string

有没有办法在Rails中传递URLstring中的查询string?

我想传递一个URLstring:

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

我怎样才能得到idempid

如果你在一个string中有一个URL,那么使用URI和CGI来区分它:

 url = 'http://www.foo.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" 

请使用标准库这个东西,不要试图用正则expression式自己做。

参考文献:

  • CGI.parse
  • URI.parse

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

我会build议阅读一个很好的Rails教程,其中应包括这样的基本知识。 这里有一个例子 – 谷歌将会出现更多:

 Rack::Utils.parse_nested_query("a=2") #=> {"a" => "2"} 

引用来自: parsing一个string,就好像它是在Ruby on Rails中的查询string

以轨道控制器的方式parsing查询string。 嵌套查询,通常通过像这样的表单字段名称: name="awesome[beer][chips]" # => "?awesome%5Bbeer%5D%5Bchips%5D=cool"name="awesome[beer][chips]" # => "?awesome%5Bbeer%5D%5Bchips%5D=cool" -and-diced 'into a awesome hash: {"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'] 

等等..

这不是最好的方法,但它的工作原理:

 request.query_string.split(/&/).inject({}) do |hash, setting| key, val = setting.split(/=/) hash[key.to_sym] = val hash end 

这将返回与所有的GET PARAMS( :name => value )哈希。 或者只是使用request.query_string方法,取决于你想获得你的GET参数的格式。 你也可以使用rake gem的request.query_params