HashとActiveSupport::OrderedHashのmergeの挙動が異なる。
使用しているRuby on Railsのバージョンは2.3.2。
Hash#mergeの場合
>> ha = {1 => 2, 2 => 4}
=> {1=>2, 2=>4}
>> hb = {2 => 1, 3 => 1}
=> {2=>1, 3=>1}
>> hc = ha.merge(hb) {|key, s_val, o_val| s_val + o_val}
=> {1=>2, 2=>5, 3=>1}
ActiveSupport::OrderedHash#mergeの場合
>> h1
=> #<OrderedHash {1=>2, 2=>4}>
>> h2
=> #<OrderedHash {2=>1, 3=>1}>
>> h3 = h1.merge(h2) {|key, s_val, o_val| s_val + o_val}
=> #<OrderedHash {1=>2, 2=>1, 3=>1}>
ActiveSupport::OrderedHashの場合、mergeの引数のブロックが無視されているようだ。
HashのつもりでOrderedHashを使っていたので、問題に気づくのに時間がかかった。
まさかこんな基本的なところに問題があろうとは。