Estoy usando el complemento awesome_nested_set
en mi proyecto Rails. Tengo dos modelos que se ven así (simplificada):Cómo representar todos los registros de un conjunto anidado en un árbol html real
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
El árbol en la base de datos se construye como se esperaba. Todos los valores de parent_id
, lft
y rgt
son correctos. El árbol tiene múltiples nodos raíz (que, por supuesto, está permitido en awesome_nested_set
).
Ahora, quiero representar todas las categorías de un cliente dado en una estructura tipo árbol correctamente ordenada: por ejemplo, etiquetas <ul>
anidadas. Esto no sería demasiado difícil, pero necesito que sea eficiente (cuanto menos SQL consultas, mejor).
Actualización: Se descubrió que es posible calcular el número de hijos para cualquier nodo dado en el árbol sin más consultas SQL: number_of_children = (node.rgt - node.lft - 1)/2
. Esto no resuelve el problema, pero puede ser útil.
Esto funciona. Tienes razón con respecto a awesome_nested_set también. No puedo evitar preguntarme por qué esto no está incorporado en el complemento en primer lugar. ¡Gracias! –
Se olvidó de mencionar: ¡El punto esencial acerca de su solución es que requiere una sola consulta SQL! –
http://gist.github.com/460814 –