ActsAsTree plugin
Ruby
Pull request Compare This branch is 3 commits ahead of rails:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib/active_record/acts
test
README
Rakefile
init.rb

README

acts_as_tree
============

Specify this +acts_as+ extension if you want to model a tree structure by providing a parent association and a children
association. This requires that you have a foreign key column, which by default is called +parent_id+.

  class Category < ActiveRecord::Base
    acts_as_tree :order => "name"
  end

  Example:
  root
   \_ child1
        \_ subchild1
        \_ subchild2

  root      = Category.create("name" => "root")
  child1    = root.children.create("name" => "child1")
  subchild1 = child1.children.create("name" => "subchild1")

  root.parent   # => nil
  child1.parent # => root
  root.children # => [child1]
  root.children.first.children.first # => subchild1

More than one tree can be specified in a model with the :name option passed
to acts_as_tress.  Named name is prepended to to all basic variable names.

  class Biology < ActiveRecord::Base
    # life, domain, kingdom, phylum, order, family, genus, species
    acts_as_tree :name => "taxonomic" # default fk taxonomic_parent_id
    #kingdom: Animalia, Platyzoa
    acts_as_tree :name => "animalia"
  end

  bio = Biology.create

  life = bio.taxonomic_children.create("name" => 'life')
  domain = life.taxonomic_children.create("name" => 'domain')
  life == bio.taxonomic_root # true
  
  animalia = bio.animalia_children.create("name" => 'Animalia')
  platyzoa = animalia.animalia_children.create("name" => 'Platyzoa')
  animalia.animalia_self_and_siblings = [animalia, platyzoa] # true

Copyright (c) 2007 David Heinemeier Hansson, released under the MIT license