Help us understand the problem. What is going on with this article?

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away