2009-09-04 201 views
1

我想找出一個優雅的方式來「繪製」出一個任意的樹結構,使用acts_as_tree定義。我的最終目標是將父/子關係轉換爲可以轉換爲Yaml文件的嵌套哈希。ruby​​:acts_as_tree嵌套散列(散列數組)

例如樹:

root 
--child 
--child 
----subchild 
----subchild 
------anotherchld 
--child 
--child 
----subchild 
------anotherhchild 
--child 

我想它產生這樣的:

{'root' => 
    [{'child' => nil }, 
    {'child' => 
    [{'subchild' => nil }, 
    {'subchild' => nil }]}, 
... 
]} 

也許這是不是最好的方法?你能否爲我提供一種替代方法來轉換樹,因此它與上面的文本差不多,但是作爲Yaml?

回答

0

我不知道如果我理解正確你的問題,但如果你正在尋找一個算法來生成(YAML)輸出樹,你可能想看看at this question(它的相關過於awesome_nested_set但我認爲它應該是可能的修改它以便與acts_as_tree一起使用)。

1

啊,遞歸:

require 'yaml' 

class Category (or whatever) 
    def to_hash 
    {@name => @children.empty? ? nil : @children.map {|child| child.to_hash}} 
    end 
end 

puts root.to_hash.inspect 
puts 
puts root.to_hash.to_yaml 

這給了我:

{"root"=>[ 
    {"child 1"=>nil}, 
    {"child 2"=>[ 
    {"subchild 1"=>nil}, 
    {"subchild 2"=>[ 
     {"subsubchild 1"=>nil} 
    ]} 
    ]}, 
    {"child 3"=>nil}, 
    {"child 4"=>[ 
    {"subchild 3"=>[ 
     {"subsubchild 2"=>nil} 
    ]} 
    ]}, 
    {"child 5"=>nil} 
]} 

root: 
- child 1: 
- child 2: 
    - subchild 1: 
    - subchild 2: 
    - subsubchild 1: 
- child 3: 
- child 4: 
    - subchild 3: 
    - subsubchild 2: 
- child 5: 

是如何形成的?