Ruby:向YAML文件添加新字段

时间:2014-08-01 19:09:14

标签: ruby yaml

我一直在寻找一下,找不到任何对我有帮助的东西。特别是因为有时事情看起来并不一致。

我有以下用于存储数据/配置内容的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模块的东西,因为它为我处理格式化/缩进。

希望有人可以帮助我。

1 个答案:

答案 0 :(得分:2)

哟必须将cfg['global']['database']['second_db']初始化为哈希而不是零。试试这个cfg['global']['database']['second_db'] = {}