레일즈에서 Hash 접근을 심볼과 문자열 동시에 할 수 있게하기

우연히 대표님의 코드를 보고 처음 본 메서드를 찾아보다 발견한 메서드.

ruby에서는 hash의 key는 symbol로 접근한다. hash[:key]

하지만 웹의 특성상 문자열 처리를 자주 하는 Rails에서는 with_indifferent_access 메서드를 지원한다.

  hash = { a: 'test'}.with_indifferent_access
  hash['a']  # => 'test'
  hash[:a]   # => 'test'

with_indifferent_access 는 정확히는 ActiveSupport::HashWithIndifferentAccess 로 연결해준다.

rgb = ActiveSupport::HashWithIndifferentAccess.new

rgb[:black] = '#000000'
rgb[:black]  # => '#000000'
rgb['black'] # => '#000000'

rgb['white'] = '#FFFFFF'
rgb[:white]  # => '#FFFFFF'
rgb['white'] # => '#FFFFFF'

위와 같이 symbol과 string 어떤 것으로도 접근 할 수 있다.

덕분에 문자열 처리 후 .to_sym을 하는 일을 줄일 수 있어서 편한 것 같다. 종종 사용할 듯하다.

똑같은 이유로

.to_hActiveSupport::HashWithIndifferentAccess 이고 .to_hash는 일반 hash로 변환된다.

.to_h로 변환한 경우 hash.symbolize_keys 를 해주지 않아도 된다.

참고