使用ruby和rake编辑yaml hashmap

使用ruby和rake编辑yaml hashmap,ruby,hash,hashmap,rake,Ruby,Hash,Hashmap,Rake,我有一个yaml谁的元素需要由用户填写。。。听起来很简单。我正在尝试读取文件、打印密钥、请求值并存储更新的文件 cnfg.yml: thing: something: another_thing: much_depth: such_yml: ... 以下是我迄今为止的代码: task :setup_cnfg do config = YAML.load_file 'cnfg.yml' config.each do |key, value| puts key

我有一个yaml谁的元素需要由用户填写。。。听起来很简单。我正在尝试读取文件、打印密钥、请求值并存储更新的文件

cnfg.yml:

thing:
  something:
  another_thing:
    much_depth:

such_yml:
...
以下是我迄今为止的代码:

task :setup_cnfg do
  config = YAML.load_file 'cnfg.yml'

  config.each do |key, value|
    puts key
    value.each do |k, v|
      print "   #{k}: "
      v = STDIN.gets.chomp() #STDIN is there due to some strange rake shenanigans       
    end
  end
  File.open('cnfg.yml','w') {|f| f.write config.to_yaml}
end
如果我在捕获输入后打印“v”,它确实会显示预期值,但如果我打印哈希后缀,所有插补值都将消失

要正确填充和存储所有数据字段,我该怎么做?

您应该实际将新的
v
分配回
散列:

task :setup_cnfg do
  config = YAML.load_file 'cnfg.yml'

  config.each do |key, value|
    puts key
    value.each do |k, _|
      print "   #{k}: "
      value[k] = STDIN.gets.chomp() 
    end
  end
  File.open('cnfg.yml','w') {|f| f.write config.to_yaml}
end