【问题标题】:How do I dynamically access .yml values如何动态访问 .yml 值
【发布时间】:2018-02-09 21:05:23
【问题描述】:

我在 rv.yml 文件中有以下内容:

:server1:
   :abc: ['ABC',1]
   :def: ['DEF',2]
   :ghi: ['GHI',3]
   :jkl: ['JKL',4]

 :server2:
   :abc: ['ABC',4]
   :def: ['DEF',2]
   :ghi: ['GHI',1]
   :jkl: ['JKL',3]

我在运行时将服务器值和数组的剩余部分存储在一个变量中。例如:server_name = server1(动态)和 prop_values = abc[1]。如果我想访问 server1 的 abc[1] 它应该返回 1,所以我可以使用 Test::data.env.server1.abc[1] 但我想动态传递值('server1' 和 abc[1] )。我该怎么做呢?使用以下内容并不能满足我的要求:

Test::data.env[server_name][prop_values]

我希望它使用 ruby​​ 解析并获取 .yml 文件中的实际值

【问题讨论】:

  • 我不知道Test::data.env.server1.abc[1] 会如何回复你4
  • > 如果我想访问 server1 的 abc[1] 它应该返回 4 你的意思是 abc[1]server2 吗?究竟是什么问题?您是否已经通过YAML.load 加载数据?
  • Test::data.env (忽略这部分) - 所以这会解析为访问 rv.yml 文件,当我基于 server1 作为键遍历内部时,我想获取第二个索引处的值数组。
  • 是的,我正在加载 yml,但我不想硬编码 server1 或 server 2,它将在运行时决定。来自 server1 的 abc[1] 应该返回 1
  • “关注并没有给我想要的” - 那么它给了你什么prop_values 是什么? Test::data.env 是什么类型?它从 #[] 方法返回了什么? 那个是如何处理#[]的?一些研究提示。

标签: ruby-on-rails ruby yaml


【解决方案1】:

首先,我们创建 load_custom.rb 用于访问自定义 .yml 文件:

config/initializers/load_config.rb

CONFIG_PATH="#{Rails.root}/config/rv.yml"
RV_CONFIG = YAML.load_file(CONFIG_PATH)

然后我们在 config 文件夹中创建 rv.yml 文件,如下所示:

./config/rv.yml

server1:
   abc: ['ABC',1]
   def: ['DEF',2]
   ghi: ['GHI',3]
   jkl: ['JKL',4]

server2:
  abc: ['ABC',4]
  def: ['DEF',2]
  ghi: ['GHI',1]
  jkl: ['JKL',3]

现在,我们可以像下面这样访问:

server_name = 'server1'
RV_CONFIG[server_name]

结果:

{"abc"=>["ABC", 1], "def"=>["DEF", 2], "ghi"=>["GHI", 3], "jkl"=>["JKL", 4]}


RV_CONFIG[server_name]['abc']

结果:

["ABC", 1]

【讨论】:

  • 我试图做同样的事情,但没有成功
  • 未初始化的常量 AbstractProps::NoSuchConfigProp (NameError)
  • 你的 Rails 版本是多少?您可以在新的 rails 项目中尝试这种用法吗?我在我的项目中尝试了这种用法并且效果很好。
  • 我使用的是 Rails 5.1.4
  • 您是否在新的 Rails 应用程序中尝试过这种用法?
猜你喜欢
  • 2011-10-05
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 2012-11-06
相关资源
最近更新 更多