Search code examples
ruby-on-railsrubyhashactivesupport

Difference between Ruby’s Hash and ActiveSupport’s HashWithIndifferentAccess


What is the difference between Ruby’s Hash and ActiveSupport’s HashWithIndifferentAccess? Which is the best for dynamic hashes?


Solution

  • Below is the simple example that will show you difference between simple ruby hash & a "ActiveSupport::HashWithIndifferentAccess"

    • HashWithIndifferentAccess allows us to access hash key as a symbol or string

    Simple Ruby Hash

    $ irb
      2.2.1 :001 > hash = {a: 1, b:2}
        => {:a=>1, :b=>2} 
      2.2.1 :002 > hash[:a]
        => 1 
      2.2.1 :003 > hash["a"]
        => nil 
    

    ActiveSupport::HashWithIndifferentAccess

    2.2.1 :006 >   hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1, b:2)
    NameError: uninitialized constant ActiveSupport
        from (irb):6
        from /home/synerzip/.rvm/rubies/ruby-2.2.1/bin/irb:11:in `<main>'
    2.2.1 :007 > require 'active_support/core_ext/hash/indifferent_access'
     => true 
    2.2.1 :008 > hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1, b:2)
     => {"a"=>1, "b"=>2} 
    2.2.1 :009 > hash[:a]
     => 1 
    2.2.1 :010 > hash["a"]
     => 1 
    
    • class HashWithIndifferentAccess is inherited from ruby "Hash" & above special behavior is added in it.