2012/01/15

Selbstverweisende Objekte - Tree Models

Mit Rails ist es relativ einfach Objekte zu erstellen, die rekursiv auf sich selbst verweisen können. Die repräsentieren meistens einen Kategoriebaum oder auch Beziehungen zwischen User (z.B. die Follower bei Twitter).

Man braucht dazu ein Model mit einem Datenbankfeld, welches sein eigenes Parent-Objekt speichert.
Mit den Methoden belongs_to und has_many lassen sich solche Beziehungen dann folgendermaßen darstellen:

  belongs_to  :parent_object,
                     :foreign_key  => "parent",
                     :class_name => "Category"
  has_many   :children,
                     :foreign_key  => "parent",
                     :class_name => "Category",
                     :order  => "name ASC",
                     :dependent => :delete_all

Nun lässt sich ganz einfach mit einer Instanz der Klasse, dessen Kinder aufrufen:

@category.children

Ebenso ist es möglich das Parent-Objekt aufzurufen:

@category.parent_object


Definiert werden diese Methoden mit dem ersten Parameter der belongs_to und has_many Definitionen. Man kann diese also nach belieben benennen.

No comments:

Post a Comment