web-dev-qa-db-fra.com

Comment faire une liste de tableau associatif dans yaml

J'essaie de stocker des variables de configuration dans yaml, représentées par un tableau associatif, également appelé dictionnaire. Voici comment j'ai fait:

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

Cela produit une exception lorsque j'essaie de l'analyser à partir de mes fichiers init ROR:

méthode non définie `symbolize_keys! ' pour nil: NilClass

Voici comment je l’initie:

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

Je suppose que ma syntaxe yaml est fausse, alors comment l'écrire correctement?

72
Antzi

Votre YAML a l'air bien, ou vous pouvez configurer un tableau de hachages comme ceci:

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

Qui va charger comme le hash suivant:

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

Mais cela ne vous donne toujours aucune référence au Rails.env dans le hachage principal. Le problème semble être ce que vous vous attendez à être dans votre hash plutôt que le format du YAML.

150
Shadwell

Pas sur Rails, mais sur Symfony2 php, j'ai dû configurer le fichier yml comme ceci:

 content_prices: 
 - 
 pays: AU 
 prix: 6990000 
 - 
 pays: AU 
 prix: 4990000 
 - 
 Pays: BE 
 Prix: 4990000 
12
sinhix

Juste au cas où quelqu'un voudrait utiliser des clés dynamiques, il est également possible:

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