为YAML文件提供多个密钥,而只为密钥使用一个值

时间:2016-06-01 21:22:52

标签: ruby key yaml

我有一个问题,我需要制作一个包含以下键的yaml文件:

  

ETA SOL VETS EMC

从这些密钥中我需要一个值为电子邮件地址,所有四个密钥都是相同的电子邮件地址,是否可以使用多个密钥创建一个yaml文件,只有一个值..?

例如:

agencies:
         - ETA
         - SOL
         - VETS
         - EMC
            advocate_email: "example@example.com" #<= Give these four the same value
         - some
         - other
         - ones
             advocate_email: "example1@example1.com" #<= Give three another value.. So one and so forth

3 个答案:

答案 0 :(得分:2)

我不确定这是您问题的最佳解决方案,但您可以将任何内容用作YAML映射中的关键字,包括序列(数组)。它看起来像这样:

agencies:
  ? - ETA
    - SOL
    - VETS
    - EMC
  : advocate_email: example@example.com
  ? - some
    - other
    - ones
  : advocate_email: example1@example1.com

每个?表示一个键,后续的:表示一个值。为了证明:

require "pp"
require "yaml"

yaml = <<YML
agencies:
  ? - ETA
    - SOL
    - VETS
    - EMC
  : advocate_email: example@example.com
  ? - some
    - other
    - ones
  : advocate_email: example1@example1.com
YML

pp YAML.load(yaml)
# => {"agencies"=>
#      {["ETA", "SOL", "VETS", "EMC"]=>{"advocate_email"=>"example@example.com"},
#       ["some", "other", "ones"]=>{"advocate_email"=>"example1@example1.com"}}}

答案 1 :(得分:1)

我不知道我是否正确但我认为你想要像

这样的东西
emails:
  ETA: email1@example.com
  SOL: email2@example.com
  VETS: email3@example.com

答案 2 :(得分:1)

**更新** 我认为您有多封电子邮件,每个群组都有更长的列表。

group1:
  email: me@email.com
  list:
    - ETA
    - SOL
    - VETS
group2:
  email: me2@email.com
  list:
    - ONE
    - TWO
    - THREE

** END UPDATE **

如果我理解正确并且您想要同样的电子邮件:

email: &email me@email.com

emails:
  ETA: *email
  SOL: *email
  VETS: *email

输出:

pry(main)> YAML.load(File.read('foo.yml'))
=> {"email"=>"me@email.com", "emails"=>{"ETA"=>"me@email.com", "SOL"=>"me@email.com", "VETS"=>"me@email.com"}}