Jak zrobić listę tablic asocjacyjnych w yaml

83

Próbuję przechowywać niektóre zmienne konfiguracyjne w yaml reprezentowane jako tablica asocjacyjna aka słownik. Oto jak to zrobiłem:

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

Powoduje to wyjątek, gdy próbuję przeanalizować go z moich plików init ROR:

niezdefiniowana metoda `symbolize_keys! ' dla nil: NilClass

Oto jak to zainicjowałem:

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

Myślę, że moja składnia yaml jest nieprawidłowa, więc jak ją poprawnie napisać?

Antzi
źródło
2
Nie widzę sekcji dla rails envs w twoim YAML
Sergio Tulentsev

Odpowiedzi:

163

Twój YAML wygląda dobrze lub możesz skonfigurować tablicę skrótów w następujący sposób:

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

Który zostanie załadowany jako następujący hash:

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

Ale to nadal nie daje żadnego odniesienia do Rails.envgłównego skrótu. Wydaje się, że problemem jest to, czego spodziewasz się w swoim skrócie, a nie w formacie YAML.

Shadwell
źródło
Chyba jest to podejście inline key: - string1, key: ['string1', 'string2',a to współczesna notacja obiektu dla stowarzyszeniowej gdzie powyższa składnia nie jest akceptowane, - { param1: 'myvalue', param2: 'myvalue2' } stackoverflow.com/a/33136212/3419535 , stackoverflow.com/a/49814618/3419535
FantomX1
12

Nie na szynach, ale na php Symfony2 musiałem skonfigurować plik yml tak:

content_prices:
  - 
    kraj: AU
    cena: 6990000
  - 
    kraj: AT
    cena: 4990000
  - 
    kraj: BE
    cena: 4990000
sinhix
źródło
6
Jest to problem z parserem symfony, który nie przestrzega specyfikacji list, chyba że po myślniku jest znak nowej linii
dreftymac
@dreftymac czy ten problem został już rozwiązany? Czy możesz podać link do raportu o błędzie?
marcv
@marcv jeśli moja pamięć dobrze mi służy, zostało to naprawione
dreftymac
0

Na wszelki wypadek, gdyby ktoś chciał użyć klawiszy dynamicznych, jest też możliwe:

AppBundle\Service\MailerService:
    lazy: false
    arguments:
      $defaultFrom:
        '%mailer_user%': '%mailer_name%'
GrumpyHat
źródło