像在Ruby on Rails中查询string一样parsingstring

我有这样的string:

"foo=bar&bar=foo&hello=hi" 

Ruby on Rails是否提供方法来parsing它,就好像它是查询string一样,所以我得到一个像这样的哈希值:

 { :foo => "bar", :bar => "foo", :hello => "hi" } 

或者我必须自己写吗?

编辑

请注意,上面的string不是来自URL的实际查询string,而是来自Facebook Connect的存储在cookie中的string。

答案取决于你正在使用的Rails版本。 如果您使用的是2.3或更高版本,请使用Rack的内置parsing器来解释参数

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

如果你在较老的Rails,你确实可以使用CGI::parse 。 请注意,散列和数组的处理方式在模块之间有着微妙的差异,因此您需要validation所获取的数据是否适合您select的方法。

您也可以将Rack::Utils包含在您的课堂中,以便读取。

 CGI::parse("foo=bar&bar=foo&hello=hi") 

给你

 {"foo"=>["bar"], "hello"=>["hi"], "bar"=>["foo"]} 

如果你谈论正在使用的Url来获取关于它们的参数的数据

 > request.url => "http://localhost:3000/restaurants/lokesh-dhaba?data=some&more=thisIsMore" 

然后获取查询参数。 使用

 > request.query_parameters => {"data"=>"some", "more"=>"thisIsMore"} 

编辑:正如在评论中所说,如果有人想伤害你,同步键可以把你的服务器closures。 当我在低调的应用程序上工作时,我仍然做得很多,因为它使得事情变得更容易,但是我不会再为高风险的应用程序

不要忘记象征着获得你想要的结果的关键

 Rack::Utils.parse_nested_query("a=2&b=tralalala").deep_symbolize_keys 

这个操作对重复是破坏性的。