默认情况下,YAML 键呈现为字符串。
development:
username: development_name
password: secret
可通过
APP_CONFIG = YAML.load_file("#{Rails.root}/config/app_config.yml")[Rails.env]
APP_CONFIG['development']['username']
# => "development_name"
如果你想让一个特定的键成为一个符号,你应该在 YAML 文件中使用 : 作为前缀。
development:
:username: development_name
:password: secret
APP_CONFIG = YAML.load_file("#{Rails.root}/config/app_config.yml")[Rails.env]
APP_CONFIG['development'][:username]
# => "development_name"
APP_CONFIG['development']['username']
# => nil
通常不会这样做,因为这是特定的 Ruby 行为。其他语言可能对领先的 :. 不满意。
如果您特别想将密钥作为符号访问,您可以使用symbolize_keys!
APP_CONFIG = YAML.load_file("#{Rails.root}/config/app_config.yml")[Rails.env].simbolize_keys!
但大多数时候,努力是不值得的。在内部,90% 的库在比较期间将符号转换为字符串,尤其是当您处理具有无关访问的哈希时。因此,在故事的最后,您可能希望在这种情况下保留字符串。
最后一个选项是创建一个HashWithIndifferentAccess
APP_CONFIG = HashWithIndifferentAccess.new(YAML.load_file("#{Rails.root}/config/app_config.yml")[Rails.env])
这将允许您访问
APP_CONFIG[:development][:username]
APP_CONFIG['development'][:username]
APP_CONFIG['development']['username']
冷漠。它通过在内部将哈希键存储为字符串并将请求转换[]
为字符串来工作,因此它始终有效。这是几个 Rails 组件使用的类,包括params[]
控制器中著名的哈希。