Ruby on Rails: HashWithIndifferentAccess

Занятная штука в Ruby on Rails 3, которую долго раскапывал по неопытности. Когда мы в контроллере получаем params, это не хэш, а HashWithIndifferentAccess, т.е. и params[:something], и params['something'] — это одно и то же.

А вот если мы объявляем некий хэш — скажем, такой:

my_hash = { :key1 => 'val1', :key2 => 'val2' }

то обратиться к нему любым из способов уже не получится.

Чтобы создать экземпляр HashWithIndifferentAccess, можно сделать так:

my_hash = {}.with_indifferent_access

Пишут об этом классе вполне откровенно на rubyonrails.org: «This class has dubious semantics».

На ту же тему: ruby on rails: merge! ‘params’ with a hash indifferently.