2009-09-04 21 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 }]}, 
... 
]} 

は、おそらくこれが最善のアプローチではないでしょうか?上記のテキストと多かれ少なかれ同じように木を変換する代わりの方法を私に教えてください。

答えて

0

あなたの質問を正しく理解しているかどうかわかりませんが、(yaml)出力ツリーを生成するアルゴリズムを探している場合は、at this question(これも関連していますが、 acts_as_treeと動作するように変更する)。私を与え

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 

1

ああ、再帰

{"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: 

どのようにそれはありますか?

関連する問題