Як скласти список асоціативного масиву в yaml


83

Я намагаюся зберегти деякі змінні конфігурації у yaml, представленому як асоціативний масив, який називається словником. Ось як я це зробив:

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

Це створює виняток, коли я намагаюся проаналізувати його з моїх файлів ініціалізації ROR:

невизначений метод `symbolise_keys! ' для nil: NilClass

Ось як я це ініціюю:

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

Я думаю, мій синтаксис yaml неправильний, тоді як правильно його написати?


2
Я не бачу розділів для залізничних рейсів у вашому
ЯМЛ

Відповіді:


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: - string1, key: ['string1', 'string2',і це сучасний об'єкт для позначення асоціативної де вище синтаксис не береться, - { param1: 'myvalue', param2: 'myvalue2' } stackoverflow.com/a/33136212/3419535 , stackoverflow.com/a/49814618/3419535
FantomX1

12

Не на рейках, а на Symfony2 php мені довелося налаштувати файл yml так:

вміст_ціни:
  - 
    країна: AU
    ціна: 6990000
  - 
    країна: AT
    ціна: 4990000
  - 
    країна: BE
    ціна: 4990000

6
Це проблема із синтаксичним аналізатором symfony, який не поважає специфікацію списків, якщо після тире немає нового рядка
dreftymac

@dreftymac чи вирішено цю проблему зараз? Не могли б ви дати посилання на звіт про помилку?
marcv

@marcv, якщо пам'ять мене
неправда,

0

На випадок, якщо хтось захоче використовувати динамічні клавіші, це також можливо:

AppBundle\Service\MailerService:
    lazy: false
    arguments:
      $defaultFrom:
        '%mailer_user%': '%mailer_name%'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.