Rails解析YAML文件 - 每个方法都带有一个过滤器

时间:2012-08-10 20:12:02

标签: ruby-on-rails ruby web-applications

我有以下YAML文件:

---
main-menu:
  - item: Test1
    param: value
  - item: Test2
    param: value
  - notitem: Test3
    param: value

我正在尝试解析所有item条目,如下所示:

#Load menu file
menu = YAML.load_file(file)

#Recursive parse function
parse = lambda do |node|
  node.each do |item|
    if !item['item'].nil? then
     .. do something with item ..
    end #end if
  end #end each
end #end parse

#Return the main menu
parse.call(menu['main-menu'])

哪种方法很好......是否有更简单的方法可以使用item过滤掉所有不属于node.each的条目?

1 个答案:

答案 0 :(得分:1)

不是我能看到的。 nodeArrayHash个对象,因此需要先对每个对象进行有条件的检查.. do something with item ..。您可以使用node.each

稍微清理next
menu = YAML.load_file(file)

parse = lambda do |node|
  node.each do |item|
    next unless item.include?('item')
    # .. do something with item ..
  end
end

parse.call(menu['main-menu'])

您也可以使用块

来调用reject
menu = YAML.load_file(file)

parse = lambda do |node|
  node.reject { |n| !n.include?('item') }.each do |item|
    # .. do something with item ..
  end
end

parse.call(menu['main-menu'])

虽然我不知道这真的“更容易”!