我一直在寻找一下,找不到任何对我有帮助的东西。特别是因为有时事情看起来并不一致。
我有以下用于存储数据/配置内容的YAML:
---
global:
name: Core Config
cfg_version: 0.0.1
databases:
main_database:
name: Main
path: ~/Documents/main.reevault
read_only: false
...
我知道如何使用以下内容更新字段:
cfg = YAML.load_file("test.yml")
cfg['global']['name'] = 'New Name'
File.open("test.yml", "w"){ |f| YAML.dump(cfg, f) }
基本上互联网上的每个人都在谈论这个问题。但是这是我的问题:我想动态地能够向该文件添加新字段。例如在"数据库"部分有一个" secondary_db"字段,它自己的名字,路径和read_only布尔值。我希望通过在哈希中添加内容来实现这一点:
cfg['global']['databases']['second_db'] = nil
cfg['global']['databases']['second_db']['name'] = "Secondary Database"
cfg['global']['databases']['second_db']['path'] = "http://someurl.remote/blob/db.reevault"
cfg['global']['databases']['second_db']['read_only'] = "true"
File.open("test.yml", "w"){ |f| YAML.dump(cfg, f) }
但是我收到了这个错误:
`<main>': undefined method `[]=' for nil:NilClass (NoMethodError)
我现在的问题是:我该怎么做?有没有YAML界面的方法?或者我是否必须手动将内容写入文件?我更喜欢通过YAML模块的东西,因为它为我处理格式化/缩进。
希望有人可以帮助我。
答案 0 :(得分:2)
哟必须将cfg['global']['database']['second_db']
初始化为哈希而不是零。试试这个cfg['global']['database']['second_db'] = {}