如何从YAML文件中收集条目?

时间:2014-02-07 08:47:53

标签: ruby-on-rails ruby yaml

我有以下YAML文件:

position_details:

  star_performer:
    title: "Star Performer"
    description: ""

  idiot of year:
    title: "idiot of year"
    description: "The Idiot of year Award recognizes excellence in anti - social  collaboration on social platform ."

我需要收集相关title不存在的description,例如从上面的文件我需要收集标题"Star Performer"。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

如果您的意思是过滤器,则需要收集这些标题

data = YAML.load(File.read(File.expand_path('path/to/your.yml', __FILE__)))

positions_with_no_description = data["position_details"].each_value.collect do |pos| 
  pos["title"] if pos["description"].empty?
end

根据toro2k的评论,如果你使用的是Rails,你可以替换空白吗?为空?涵盖没有描述密钥的情况。

此外,这将为您提供包含nil值的数组positions_with_no_description。要消除它们,只需致电compact!

上述简洁版可能是:

filtered = data["position details"]
             .each_value
             .collect { |p| p["title"] if p["description"].blank? }
             .compact!

我已经在你的测试yml文件上对它进行了测试,但它确实有效。错误是我错误地使用了"position_details",而你把“位置细节”作为你的关键 - 没有下划线。

我刚从IRB那里测试过的确切代码:

> data = YAML.load(File.read(File.expand_path('../test.yml', __FILE__))
> data["position details"].each_value.collect { |x| x["title"] if x["description"].empty? }.compact!
> # => ["Star Performer"]