2009-09-04 7 views
1

J'essaie de trouver une manière gracieuse de "dessiner" une arborescence arbitraire, définie en utilisant acts_as_tree. Mon but ultime est de convertir les relations parent/enfant en un hachage imbriqué qui peut être converti en un fichier Yaml.Ruby: actes_as_tree aux hachages imbriqués (tableaux de hachages)

exemple arbre:

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

Je voudrais à produire ceci:

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

Peut-être que ce n'est pas la meilleure approche? Pouvez-vous me fournir une autre approche pour convertir l'arbre de sorte qu'il ressemble plus ou moins au texte ci-dessus, mais en tant que Yaml?

Répondre

0

Je ne sais pas si je comprends bien votre question, mais si vous êtes à la recherche d'un algorithme pour générer l'arbre de sortie (yaml) vous pouvez regarder at this question (il est lié trop awesome_nested_set mais je pense qu'il devrait être possible pour le modifier afin de travailler avec acts_as_tree).

1

Ah, récursivité:

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 

Ce qui me donne:

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

Comment ça?

Questions connexes