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ć?


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.


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

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%'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.