ja hallo erstmal,…
ich stehe hier vor einem kleinen Problem:
Wir haben eine kleine Materialverwaltung. Material ist in Gruppen
aufgeteilt:
Beispiel:
Ein Schraubendreher ist Teil des Satzes “Schraubendreher Paket”, dies
ist Teil
des Satzes Werkzeugkasten, dies ist Teil des Satzes Fahrzeug.
(Streng genommen ist der Schraubendreher auch wiederrum ein Satz, für den
Einzelne Bits hinterlegt werden können).
Dabei können z.B. diese Use-Cases auftreten:
a) Der Werkzeugkasten wird vom Fahrzeug genommen und eingelagert.
b) Das Schraubendreher Set ist nicht mehr Teil eines Werkzeugkasten,
sondern
wird direkt in der Werkstatt an die Wand gehangen.
c) Zu einem Satz (oder Teil) liegt ein Defekt vor, der erfasst werden
muss.
Bislang wird die Ansicht via “acts_as_tree” gerendert. dies ist jedoch
ungeschickt, da häufig der ganze Baum geladen werden muss. -> n viele
SQL-Queries.
Ich überlege gerade, das ganze in ein nested-Set zu überführen. Was haltet ihr
davon?
An ein paar Dingen hakt es derzeit:
-e s scheint eine Erweiterung acts_as_thread zu geben, dessen Homepage
ich
nicht erreiche und die besser geeignet sein könnte - stimmt dies?
-
Ich bin leider was DB-Performance anbelagt nicht so bewandert:
Wie schlagen sich die Oben beschriebenen Use-Cases im Vergleich zu einem
vollen Auslesen des Baums? Macht es Sinn auf acts_as_nested_set zu
migrieren? -
Kann ich a_a_n_s genauso verwenden wie a_a_t? D.h. parent_id setzen
und gut
ist’s, oder muss ich mich in einem der o.g. UC-Cases noch um left,
right,
etc. kümmern.
Im Use-Case b) würde sich sogar der Scope ändern - da nun der
Schraubendrehersatz nicht mehr Mitglied der Listen Werkzeugkasten,
Fahrzeug
ist. Kann Rails das automatisch?
Ich stelle es mir ein wenig haarig vor, Scopes manuell zu führen, da jeder
Knoten im Baum eine Wurzel eines potentiellen Baums ist und bei einem
Zerlegen der Baumstruktur neue Scopes gesetzt werden müssten … oder kann
Rails das automatisch? -
Im Fall einer Migration müsste ich die vorhandene DB-Struktur in das neue
Format migrieren. Das hinzufügen der Spalten wird natürlich kein Problem
sein - gibt es aber einen einfach Weg, die neuen Attributes (lft, fgt,
root,
scope) zu setzen, oder ist hier SQL-Handarbeit gefragt?
So, das war’s dann aber auch…
Alles Gute
Jan