yamlで連想配列のリストを作成する方法


83

連想配列(辞書)として表される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にrailsenvのセクションが表示されません
Sergio Tulentsev 2013年

回答:


163

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

Railsではなく、Symfony2 phpで、ymlファイルを次のように構成する必要がありました。

content_prices:
  - 
    国:AU
    価格:6990000
  - 
    国:AT
    価格:4990000
  - 
    国:BE
    価格:4990000

6
これは、ダッシュの後に改行がない限り、リストの指定を尊重しないsymfonyパーサーの問題です
dreftymac 2015年

@dreftymacこの問題は今修正されていますか?バグレポートへのリンクを教えてください。
marcv 2016

@marcv私のメモリが正しく機能する場合、それは修正されました
dreftymac 2016

0

誰かが動的キーを使用したい場合に備えて、次のことも可能です。

AppBundle\Service\MailerService:
    lazy: false
    arguments:
      $defaultFrom:
        '%mailer_user%': '%mailer_name%'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.