2022/09/01〜世界旅暮らし中 旅経路はこちら

Rails シンボルのハッシュと文字列のハッシュをマージしたい

rails
  • URLをコピーしました!
目次

問題

キーが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 のハッシュになってしまうから、そこに上書きでマージするには必要でした。

参考文献

ありがとうございます!

rails

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次