Estoy tratando de almacenar algunas variables de configuración en yaml representadas como una matriz asociativa, también conocida como diccionario. Así es como lo hice:
content_prices:
- {country: AU, price: 6990000}
- {country: AT, price: 4990000}
- {country: BE, price: 4990000}
Esto produce una excepción cuando trato de analizarlo desde mis archivos de inicio ROR:
método indefinido `symbolize_keys! ' para cero: NilClass
Así es como lo inicio:
Config = YAML.load_file("#{Rails.root}/config/prices.yml")[Rails.env].symbolize_keys!
Supongo que mi sintaxis de yaml es incorrecta, entonces, ¿cómo escribirlo correctamente?
Respuestas:
Su YAML se ve bien, o puede configurar una matriz de hashes como este:
content_prices: - country: AU price: 6990000 - country: AT price: 4990000 - country: BE price: 4990000
Que se cargará como el siguiente hash:
{"content_prices"=>[ {"country"=>"AU", "price"=>6990000}, {"country"=>"AT", "price"=>4990000}, {"country"=>"BE", "price"=>4990000}]}
Pero eso todavía no le da ninguna referencia al
Rails.env
hash principal. El problema parece ser lo que esperas que esté en tu hash en lugar del formato del YAML.fuente
key: - string1
,key: ['string1', 'string2',
y esta es una notación de objetos contemporánea para asociativa donde no se acepta la sintaxis anterior,- { param1: 'myvalue', param2: 'myvalue2' }
stackoverflow.com/a/33136212/3419535 , stackoverflow.com/a/49814618/3419535No en rieles, sino en Symfony2 php, tuve que configurar el archivo yml de esta manera:
fuente
En caso de que alguien quiera usar claves dinámicas, también es posible:
AppBundle\Service\MailerService: lazy: false arguments: $defaultFrom: '%mailer_user%': '%mailer_name%'
fuente