J'utilise le plugin awesome_nested_set
dans mon projet Rails. J'ai deux modèles qui ressemblent à ceci (simplifié):Comment rendre tous les enregistrements d'un ensemble imbriqué dans un arbre html réel
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
L'arbre dans la base de données est construite comme prévu. Toutes les valeurs de parent_id
, lft
et rgt
sont correctes. L'arbre a plusieurs nœuds racines (ce qui est bien entendu autorisé dans awesome_nested_set
).
Maintenant, je veux rendre toutes les catégories d'un client donné dans une arborescence triée correctement comme structure: par exemple <ul>
étiquettes imbriquées. Ce ne serait pas trop difficile mais j'ai besoin d'être efficace (le moins de requêtes SQL le mieux).
Mise à jour: Calculé qu'il est possible de calculer le nombre d'enfants pour un nœud donné dans l'arborescence sans autres requêtes SQL: number_of_children = (node.rgt - node.lft - 1)/2
. Cela ne résout pas le problème, mais cela peut s'avérer utile.
Cela fonctionne. Vous avez raison concernant awesome_nested_set aussi. Je ne peux pas m'empêcher de me demander pourquoi ce n'est pas intégré dans le plugin en premier lieu. THX! –
Oublié de mentionner: Le point essentiel à propos de votre solution est qu'il ne nécessite qu'une seule requête SQL! –
http://gist.github.com/460814 –