gpt4 book ai didi

ruby-on-rails - YAML 配置文件 : Why 'example' instead of :example?

转载 作者:行者123 更新时间:2023-12-04 07:35:34 27 4
gpt4 key购买 nike

我为环境特定变量(如用户名和密码)设置了一个环境 YAML 文件。要在我的应用程序中使用这些变量,我需要使用 APP_CONFIG['username']而不是 APP_CONFIG[:username] .为什么是这样?我将如何启用后者?不是主要问题,但不知道造成差异的原因让我很困扰。

配置/初始化程序/load_app_config.rb

APP_CONFIG = YAML.load_file("#{Rails.root}/config/app_config.yml")[Rails.env]

配置/app_config.yml
development:
username: development_name
password: secret

production:
username: production_name
password: super_secret

最佳答案

默认情况下,YAML key 呈现为字符串。

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[] Controller 中的哈希值。

关于ruby-on-rails - YAML 配置文件 : Why 'example' instead of :example?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12699579/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com