如何从Rails中的URL获取查询string
有没有办法在Rails中传递URLstring中的查询string?
我想传递一个URLstring:
http://www.foo.com?id=4&empid=6
我怎样才能得到id
和empid
?
如果你在一个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]
将等于4
, params[: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
。