Как составить список ассоциативного массива в yaml

Я пытаюсь сохранить некоторые переменные конфигурации в yaml, представленные в виде ассоциативного массива aka dictionary. Вот как я это сделал:

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

Это создает исключение, когда я пытаюсь проанализировать его из моих файлов инициализации ROR:

undefined метод `symbolize_keys! ' для nil: NilClass

Вот как я его инициализирую:

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

Я предполагаю, что синтаксис yaml неверен, а затем как правильно его записать?

Ответ 1

Ваш 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.

Ответ 2

Не на рельсах, но на Symfony2 php мне пришлось настроить файл yml следующим образом:

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

Ответ 3

На случай, если кто-то захочет использовать динамические ключи, это также возможно:

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