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


81

我正在尝试将一些配置变量存储在以关联数组aka字典表示的yaml中。这是我的做法:

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

当我尝试从我的ROR初始化文件中解析它时,这会产生一个异常:

未定义的方法'symbolize_keys!' 对于nil:NilClass

这是我的初始化方式:

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

我猜我的Yaml语法错误,那么如何正确编写呢?


2
我没有看到你的YAML钢轨ENVS部分
塞尔吉奥Tulentsev

Answers:


162

您的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' } stackoverflow.com/a/33136212/3419535stackoverflow.com/a/49814618/3419535
FantomX1

12

不是在轨道上,而是在Symfony2 php上,我必须像这样配置yml文件:

content_prices:
  -- 
    国家/地区:AU
    价格:6990000
  -- 
    国家:AT
    价钱:4990000
  -- 
    国家:BE
    价钱:4990000

6
这是symfony解析器的问题,它不遵守列表的规范,除非破折号后有换行符
dreftymac

@dreftymac这个问题现在解决了吗?您能否提供错误报告的链接?
marcv

@marcv如果我的记忆正确地为我服务,则它已修复
dreftymac

0

万一有人要使用动态键,也可以:

AppBundle\Service\MailerService:
    lazy: false
    arguments:
      $defaultFrom:
        '%mailer_user%': '%mailer_name%'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.