Posted at

to_query でハッシュからクエリ文字列を作成する際は、辞書順に置き換わることに注意する

More than 1 year has passed since last update.


to_query とは?

ハッシュからいい感じにクエリ文字列を生成してくれるメソッド。

active_support/core_ext を require すると使える。


注意点

require 'active_support'

require 'active_support/core_ext'

hoge = {}
hoge[:b] = 1
hoge[:a] = 2
hoge #=> {:b=>1, :a=>2} この時点では、(Ruby1.9以降ならば登録順が保持されている)
hoge.to_query #=> "a=2&b=1" key による辞書順に変わる!

ということで、ハッシュは Ruby1.9 より順序が保証されるようになったのだが、to_query ではハッシュの key で辞書順に直した形で文字列化されるので注意が必要。


参考

https://github.com/rails/rails/issues/10529

↑ここでめっちゃ議論されている。

hughdavenport氏 「配列の場合とハッシュの場合で挙動が違うのはバグだろ!!」

rafaelfranca氏 「確かに修正の必要性は認めるが、ドキュメントと矛盾していないのでこれはバグではない。メーリスでやれ。」