Ich habe eine Kategorienliste mit Unterkategorien. Nun möchte ich acts_as_list verwenden, um die Reihenfolge mit den Feld “position” leichter ändern zu können. Das geht auch soweit (Dann hat man so tolle Funktionen wie Category.move_higher).
Leider gibt es da aber immer wieder Probleme, da eine neu hinzugefügte Kategorie die Position max(alle_positionen)+1 erhält. Also die höchste ALLER Positionen +1. Ich möchte aber, dass eine neu hinzugefügte Kategorie die position+1 bezogen auf seine Vaterkategorie erhält!
Also sich als Liste verhält, aber nur in Bezug auf seine Geschwister!
Dafür muss man das Plugin (Rails 2.0) “acts_as_list” ändern. Und zwar muss man die Zeile 64, auskommentieren:
##{scope_condition_method}Und die Funktion scope_condition() in Zeile 186 wie folgt ändern:
# Overwrite this method to define the scope of the list changes #def scope_condition() "1" end def scope_condition() "parent_id = #{self.parent_id}" end
So habe ich mir mein eigenes acts_as_list_in_tree (download) Plugin gebaut.
Vielleicht noch als Anmerkung:
In acts_as_tree gibt es KEINE DESCENDANTS Funktion! Das heißt, man kann sich in einem Tree nicht die Nachkommen ausgeben lassen. Die Vorfahren schon, mit .ancestors, aber halt nicht die Nachkommen.
Siehe da HIER habe ich die Lösung gefunden. Ich hatte nur gehofft, sie sei in Rails 2.0 schon implementiert, ist sie aber nicht!
Also selber hinzufügen (am besten unter die ancestors funktion) in
/vendor/plugins/acts_as_tree/lib/active_record/acts/tree.rb:
# Bugfix - Returns list of descendants def descendants descendants = [] self.children.each { |child| descendants += [child] + child.descendants } if self.children.length > 0 descendants end
Wenn es in Rails 2.x übernommen wird, kann man es wieder löschen ;)
Das war’s für heute :)
Ähnliche Posts:» No related posts

Ich heiße Captain Future und meine Leidenschaft ist es die Brücke zwischen Menschen und Technik zu schlagen.
0 Responses to “Plugin: acts_as_list_in_tree und descendants in acts_as_tree”