如何在yaml中创建关联数组列表

97

我试图将一些配置变量存储在yaml文件中,表示为一个关联数组或字典。这是我所做的方式:

content_prices:                                                                                                                                                                                                                               
  - {country: AU, price: 6990000}                                                                                                                                                                                                             
  - {country: AT, price: 4990000}                                                                                                                                                                                                             
  - {country: BE, price: 4990000}  

当我尝试从我的 ROR init 文件中解析它时,会出现异常:

未定义方法 `symbolize_keys!' for nil:NilClass

这是我初始化它的方式:

Config = YAML.load_file("#{Rails.root}/config/prices.yml")[Rails.env].symbolize_keys!

我猜我的yaml语法是错的,那该怎么正确地编写它呢?


2
我在你的 YAML 中没有看到关于 Rails 环境的部分。 - Sergio Tulentsev
3个回答

181

你的YAML看起来没问题,或者你可以像这样配置一个哈希数组:

content_prices:
  - country: AU
    price: 6990000
  - country: AT
    price: 4990000
  - country: BE
    price: 4990000

将以以下哈希值加载:

{"content_prices"=>[
  {"country"=>"AU", "price"=>6990000}, 
  {"country"=>"AT", "price"=>4990000}, 
  {"country"=>"BE", "price"=>4990000}]}

但这仍然没有为你提供主哈希表中Rails.env的任何参考。问题似乎在于你期望哈希表中有什么,而不是YAML的格式。


我猜这是内联方法 key: - string1key: ['string1', 'string2'],而这是关联数组的现代对象表示法,上述语法不被接受,- { param1: 'myvalue',param2: 'myvalue2' } https://dev59.com/u2Ag5IYBdhLWcg3wYqF0#33136212,https://dev59.com/bFUL5IYBdhLWcg3wyKgk#49814618。 - FantomX1

15

不是使用Rails,而是使用Symfony2 PHP框架,我需要像这样配置yml文件:

content_prices:
  - 
    country: 澳大利亚
    price: 6990000
  - 
    country: 奥地利
    price: 4990000
  - 
    country: 比利时
    price: 4990000

7
这是一个与Symfony解析器有关的问题,它不会遵循规范中对列表的定义,除非在破折号后面有一个换行符。 - dreftymac
@dreftymac,这个问题现在解决了吗?你能给一个错误报告的链接吗? - marcv
如果我的记忆没有出错,@marcv,这个问题已经被解决了。 - dreftymac

0

如果有人想使用动态键,也是可以的:

AppBundle\Service\MailerService:
    lazy: false
    arguments:
      $defaultFrom:
        '%mailer_user%': '%mailer_name%'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接