There are a few ways to do this
-
There’s a
deep_symbolize_keysmethod in Railshash.deep_symbolize_keys! -
As mentioned by @chrisgeeq, there is a
deep_transform_keysmethod that’s available from Rails 4.hash.deep_transform_keys(&:to_sym)There is also a bang
!version to replace the existing object. -
There is another method called
with_indifferent_access. This allows you to access a hash with either a string or a symbol like howparamsare in the controller. This method doesn’t have a bang counterpart.hash = hash.with_indifferent_access -
The last one is using
JSON.parse. I personally don’t like this because you’re doing 2 transformations – hash to json then json to hash.JSON.parse(JSON[h], symbolize_names: true)
UPDATE:
16/01/19 – add more options and note deprecation of deep_symbolize_keys
19/04/12 – remove deprecated note. only the implementation used in the method is deprecated, not the method itself.