私はこのような文字列を持っています:
"foo=bar&bar=foo&hello=hi"
Does Ruby on Railsこれをクエリ文字列であるかのように解析するメソッドを提供しているので、次のようなハッシュを取得します。
{
:foo => "bar",
:bar => "foo",
:hello => "hi"
}
それとも自分で書く必要がありますか?
上記の文字列は、URLからの実際のクエリ文字列ではなく、Facebook ConnectのCookieに保存されている文字列であることに注意してください。
答えは、使用しているRailsのバージョンによって異なります。2.3以降を使用している場合は、パラメーターにRackの組み込みパーサーを使用します
Rack::Utils.parse_nested_query("a=2") #=> {"a" => "2"}
古いRailsを使用している場合は、CGI::parse
を使用できます。ハッシュと配列の処理はモジュール間で微妙に異なるため、取得するデータが選択したメソッドに対して正しいかどうかを確認する必要があります。
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"}
編集:コメントで述べたように、誰かを傷つけたい場合、キーを同期化するとサーバーがダウンする可能性があります。ロープロファイルアプリで作業するときは、作業が簡単になるので、それでも多くのことをしますが、ハイステークアプリではもうしません。
希望する結果を得るためにキーをシンボル化することを忘れないでください
Rack::Utils.parse_nested_query("a=2&b=tralalala").deep_symbolize_keys
この操作は重複に対して破壊的です。
ハッシュが必要な場合は、使用できます
Hash[CGI::parse(x).map{|k,v| [k, v.first]}]