Programing

Ruby on Rails에 해시가있는 경우 무관심하게 액세스 할 수있는 방법이 있습니까?

lottogame 2020. 12. 15. 08:09
반응형

Ruby on Rails에 해시가있는 경우 무관심하게 액세스 할 수있는 방법이 있습니까?


이미 해시가있는 경우 이렇게 만들 수 있습니까?

h[:foo]
h['foo']

같은가요? (이것을 무차별 액세스라고합니까?)

세부 정보 : 다음을 사용하여이 해시를로드 initializers했지만 차이를 만들지 않아야합니다.

SETTINGS = YAML.load_file("#{RAILS_ROOT}/config/settings.yml")

그냥 사용할 수 있습니다 with_indifferent_access.

SETTINGS = YAML.load_file("#{RAILS_ROOT}/config/settings.yml").with_indifferent_access

이미 해시가있는 경우 다음을 수행 할 수 있습니다.

HashWithIndifferentAccess.new({'a' => 12})[:a]

다음과 같이 YAML 파일을 작성할 수도 있습니다.

--- !map:HashWithIndifferentAccess
one: 1
two: 2

그 후 :

SETTINGS = YAML.load_file("path/to/yaml_file")
SETTINGS[:one] # => 1
SETTINGS['one'] # => 1

일반 해시 대신 HashWithIndifferentAccess사용하십시오 .

완전성을 위해 다음과 같이 작성하십시오.

SETTINGS = HashWithIndifferentAccess.new(YAML.load_file("#{RAILS_ROOT}/config/settings.yml"­))

You can just make a new hash of HashWithIndifferentAccess type from your hash.

hash = { "one" => 1, "two" => 2, "three" => 3 }
=> {"one"=>1, "two"=>2, "three"=>3}

hash[:one]
=> nil 
hash['one']
=> 1 


make Hash obj to obj of HashWithIndifferentAccess Class.

hash =  HashWithIndifferentAccess.new(hash)
hash[:one]
 => 1 
hash['one']
 => 1

참조 URL : https://stackoverflow.com/questions/5861532/if-i-have-a-hash-in-ruby-on-rails-is-there-a-way-to-make-it-indifferent-access

반응형