先日以下の記事を書いた。
キーワード引数を使って、多くなった引数をまとめようってやつ。
キーワード引数を使うときに、ハッシュのキーはシンボルじゃないといけないんです。
じゃあ、ハッシュのキーをシンボル化したいときはどうすりゃええねん!
ってことがあると思うので、そのやり方を書いてみました。
まぁ簡単です。
[1] pry(main)> hoge = {'a'=> 'あ', 'b'=> 'い'}
=> {"a"=>"あ", "b"=>"い"}
このハッシュのhogeに対して
[2] pry(main)> hoge.symbolize_keys
=> {:a=>"あ", :b=>"い"}
symbolize_keysを使えば、キーをシンボル化できるようになります。
次に、ハッシュがネストしていた場合に、このsymbolize_keysを使ったらどうなるかみてみます。
[3] pry(main)> fuga = {'a'=> 'あ', 'b'=> 'い', 'c'=>{'d'=>'う'}}
=> {"a"=>"あ", "b"=>"い", "c"=>{"d"=>"う"}}
[4] pry(main)> fuga.symbolize_keys
=> {:a=>"あ", :b=>"い", :c=>{"d"=>"う"}}
なるほど。ネストした部分は、シンボルの形になってませんね。
ってときに、ネストした部分のハッシュのキーもシンボル化したいときに使うのがこれ。
[5] pry(main)> fuga = {'a'=> 'あ', 'b'=> 'い', 'c'=>{'d'=>'う'}}
=> {"a"=>"あ", "b"=>"い", "c"=>{"d"=>"う"}}
[6] pry(main)> fuga.deep_symbolize_keys
=> {:a=>"あ", :b=>"い", :c=>{:d=>"う"}}
deep_symbolize_keysってのを使えば、ネストした先にキーも全部シンボル化してくれます。