LoginSignup
4
1

More than 5 years have passed since last update.

【Ruby on Rails】ハッシュのキーをシンボル化してみた。ネストしたのも含めて。

Posted at

先日以下の記事を書いた。

キーワード引数を使って、多くなった引数をまとめようってやつ。

キーワード引数を使うときに、ハッシュのキーはシンボルじゃないといけないんです。
じゃあ、ハッシュのキーをシンボル化したいときはどうすりゃええねん!
ってことがあると思うので、そのやり方を書いてみました。

まぁ簡単です。


[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ってのを使えば、ネストした先にキーも全部シンボル化してくれます。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1