Como renderizar todos os registros de um conjunto aninhado em uma árvore html real
Estou usando oawesome_nested_set
plugin no meu projeto Rails. Eu tenho dois modelos que se parecem com isso (simplificado):
class Customer < ActiveRecord::Base
has_many :categories
end
class Category < ActiveRecord::Base
belongs_to :customer
# Columns in the categories table: lft, rgt and parent_id
acts_as_nested_set :scope => :customer_id
validates_presence_of :name
# Further validations...
end
A árvore no banco de dados é construída conforme o esperado. Todos os valores deparent_id
, lft
ergt
estão corretas. A árvore tem vários nós raiz (o que é permitido emawesome_nested_set
).
Agora, quero renderizar todas as categorias de um determinado cliente em uma estrutura de árvore ordenada corretamente: por exemplo, aninhado<ul>
Tag. Isso não seria muito difícil, mas eu preciso que seja eficiente (quanto menos consultas SQL melhor).
Atualizar: Descobri que é possível calcular o número de filhos para um determinado Nó na árvore sem mais consultas SQL:number_of_children = (node.rgt - node.lft - 1)/2
. Isso não resolve o problema, mas pode ser útil.