コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Railsのkey名変更系便利メソッドには deep がつくより強力なバージョンがある

ハッシュにキーがややこしいことになっている時につかえるものたち

環境

rails (5.2.0)

効能

deep がつくものは値にハッシュ値がある場合、それらの値のハッシュのキーも対象として処理を行う。

deep_symbolize_keys はすべてシンボル化する

▼変化前

hash = {
    "key1" => "value_a",
    "key2" => {
        "child_array" => [{"key" => "value"}, {"key_a" => {"key_a1" => "value"}},],
        "child_hash" => {
            "child_child_array" => [1, 2, 3],
            "child_child_hash" => {
                key: "deep_value"
            }
        }

    }
}

▼変化後

{:key1 => "value_a",
        :key2 => {
            :child_array => [{:key => "value"}, {:key_a => {:key_a1 => "value"}}],
            :child_hash => {
                :child_child_array => [1, 2, 3],
                :child_child_hash => {
                    :key => "deep_value"
                }
            }
        }
}

arrayの中身も見てくれる

対象のメソッド

# ハッシュをすべてストリングに
deep_stringify_keys
# ハッシュをすべてシンボルに
deep_symbolize_keys
# すべてのキーに対してブロックを呼び出した結果で置き換えたハッシュを返します
deep_transform_keys.with_index {|k, i| "#{k}.#{i}" }

参考リンク