目次
問題
キーがSymbol のハッシュ
hash_a = { :a => 'あ', :b => 'い' }
キーがString のハッシュ
hash_b= { 'a' => '1', 'b' => '2' }
これらをマージしても値が上書きされません。
hash_a.merge(hash_b) => { :a=>"あ", :b=>"い", "a"=>"1", "b"=>"2" }
求めていたのはこんな感じです。
{ :a=>'1', :b=>'2' }
解決法
with_indifferent_access
を使えば解決できました。
キーがSymbol のハッシュをString のに変換してくれます。
hash_a = { :a => 'あ', :b => 'い' }.with_indifferent_access => { "a"=>"あ", "b"=>"い" }
これでマージすると求めていた結果になります。
hash_a.merge(hash_b) => { "a"=>"1", "b"=>"2" }
おわりに
最初はSymbol のハッシュをString で記述して解決しようとしていましたが、スッキリ解決できる方法があってよかったです。
データセッションに入れた時にどうしてもString のハッシュになってしまうから、そこに上書きでマージするには必要でした。
参考文献
ありがとうございます!