Sto utilizzando il plug-in awesome_nested_set
nel mio progetto Rails. Ho due modelli che assomigliano a questo (semplificato):Come eseguire il rendering di tutti i record da un set nidificato in un albero html reale
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'albero nel database è costruito come previsto. Tutti i valori di parent_id
, lft
e rgt
sono corretti. L'albero ha più nodi radice (che è ovviamente consentito in awesome_nested_set
).
Ora, voglio eseguire il rendering di tutte le categorie di un determinato cliente in una struttura ad albero ordinata correttamente: ad esempio i tag nidificati <ul>
. Questo non sarebbe troppo difficile, ma ho bisogno che sia efficiente (meno query SQLl, meglio è).
Aggiornamento: È stato calcolato che è possibile calcolare il numero di figli per ogni dato nodo nell'albero senza ulteriori query SQL: number_of_children = (node.rgt - node.lft - 1)/2
. Questo non risolve il problema ma potrebbe rivelarsi utile.
Questo funziona. Hai ragione anche su awesome_nested_set. Non posso fare a meno di chiedermi perché questo non sia integrato nel plugin in primo luogo. Grazie! –
Hai dimenticato di menzionare: il punto essenziale della tua soluzione è che richiede una sola query SQL! –
http://gist.github.com/460814 –