概要
元々あったコードを8.0.0に持って行ったらエラーになったので共有です
8.0.0でHashWithIndifferentAccess#stringify_keys
の挙動が変更されました
内容
HashWithIndifferentAccess
とは、その名の通り無差別にアクセスできるハッシュのこと
どういうことかというと
{ name: "Boku", "age": 1 }
というHashがあった時、
musabetsu = { name: "Boku", "age": 1 }.with_indifferent_access
とすると
puts musabetsu[:name]
# => Boku
puts musabetsu["name"]
# => Boku
ハッシュでも文字列でもアクセスできるようになる
ただのハッシュだと、当然keyに登録していない方はnilが帰ってくる
musabetsu_zyanai = { name: "Boku", "age": 1 }
puts musabetsu_zyanai[:name]
# => Boku
puts musabetsu_zyanai["name"]
# => nil
ここで、ここでハッシュのkeyをシンボルでも文字列でもないものにしてみる
koreha_dou = { 1 => "suji ha?" }.with_indifferent_access
ここで8.0.0とそれ以前で挙動が変わってくる
# 8.0.0以前
puts koreha_dou
{ 1 => "suji ha?" }
# 8.0.0以降
{ "1" => "suji ha?" }
社内ライブラリなどで、数字がkeyに入る可能性がある場合は注意してみてください
リンク
変更PR