シンボルに注意

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の中のキーはすべて文字列になっています。