97 votes

Comment créer une liste de tableaux associatifs en yaml ?

J'essaie de stocker certaines variables de configuration dans le yaml représenté comme un tableau associatif ou un dictionnaire. Voici comment j'ai procédé :

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 indéfinie `symbolize_keys!' pour nil:NilClass

Voici comment je l'ai fait :

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

Je pense que ma syntaxe yaml est incorrecte, alors comment l'écrire correctement ?

180voto

Shadwell Points 14102

Votre YAML semble correct, ou vous pouvez configurer un tableau de hachages comme ceci :

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

Ce qui se chargera comme le hachage suivant :

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

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

14voto

sinhix Points 808

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

content\_prices:
  - 
    country: AU
    price: 6990000
  - 
    country: AT
    price: 4990000
  - 
    country: BE
    price: 4990000

0voto

GrumpyHat Points 130

Au cas où quelqu'un voudrait utiliser des clés dynamiques, c'est également possible :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X