Ich versuche, einige Konfigurationsvariablen in yaml zu speichern, die als assoziatives Array oder Wörterbuch dargestellt werden. So habe ich es gemacht:
content_prices:
- {country: AU, price: 6990000}
- {country: AT, price: 4990000}
- {country: BE, price: 4990000}
Dies führt zu einer Ausnahme, wenn ich versuche, sie aus meinen ROR-Init-Dateien zu analysieren:
undefinierte Methode `symbolize_keys! ' für null: NilClass
So initiiere ich es:
Config = YAML.load_file("#{Rails.root}/config/prices.yml")[Rails.env].symbolize_keys!
Ich denke, meine Yaml-Syntax ist falsch. Wie schreibe ich sie dann richtig?
Antworten:
Ihre YAML sieht in Ordnung aus, oder Sie können eine Reihe von Hashes wie folgt konfigurieren:
content_prices: - country: AU price: 6990000 - country: AT price: 4990000 - country: BE price: 4990000
Welches wird als der folgende Hash geladen:
{"content_prices"=>[ {"country"=>"AU", "price"=>6990000}, {"country"=>"AT", "price"=>4990000}, {"country"=>"BE", "price"=>4990000}]}
Aber das gibt Ihnen immer noch keinen Hinweis auf
Rails.env
den Haupt-Hash. Das Problem scheint eher das zu sein, was Sie in Ihrem Hash erwarten, als das Format der YAML.quelle
key: - string1
,key: ['string1', 'string2',
und dies ist eine zeitgemäße- { param1: 'myvalue', param2: 'myvalue2' }
Objektnotation für Assoziative, bei der die obige Syntax nicht akzeptiert wird. Stackoverflow.com/a/33136212/3419535 , stackoverflow.com/a/49814618/3419535Nicht auf Schienen, sondern auf Symfony2 PHP musste ich die yml-Datei folgendermaßen konfigurieren:
quelle
Nur für den Fall, dass jemand dynamische Schlüssel verwenden möchte, ist es auch möglich:
AppBundle\Service\MailerService: lazy: false arguments: $defaultFrom: '%mailer_user%': '%mailer_name%'
quelle