シンボルに注意
Railsでは HashWithIndifferentAccessクラスがよしなにやってくれるので、:idでも"id"のどちらでもいいんだけど、自分で作った Hashはそういうわけにはいかないので、ちゃんと意識して使いましょう。シンボルと文字列は違います。
「文字列」=「シンボル」.to_s あるいは、「シンボル」.inspect = ":" +「文字列」の関係です。
例えば
こう書けばよくわかります。
irb(main):007:0> h = { "aa"=>"1", "bb"=>"2", :cc=>"3"} => {:cc=>"3", "bb"=>"2", "aa"=>"1"} irb(main):008:0> h["aa"] => "1" irb(main):009:0> h[:aa] => nil irb(main):010:0> h["cc"] => nil irb(main):011:0> h[:cc] => "3"
すでに Hashの中に入っているときから違います。Railsでは HashWithIndifferentAccessクラスにシンボルが渡されると文字列に変換してキーにするので、このクラスの Hashの中のキーはすべて文字列になっています。