$: << File.dirname(__FILE__) require "connect" require "logger" require "rubygems" require "active_record" require "./vendor/plugins/acts_as_tree/lib/active_record/acts/tree.rb" require "./vendor/plugins/acts_as_tree/init" #ActiveRecord::Base.logger = Logger.new(STDERR) ActiveRecord::Schema.define do #START:migrations create_table :categories, :force => true do |t| t.string :name t.integer :parent_id end #END:migrations end #START:model class Category < ActiveRecord::Base acts_as_tree :order => "name" end #END:model #START:setup root = Category.create(:name => "Books") fiction = root.children.create(:name => "Fiction") non_fiction = root.children.create(:name => "Non Fiction") non_fiction.children.create(:name => "Computers") non_fiction.children.create(:name => "Science") non_fiction.children.create(:name => "Art History") fiction.children.create(:name => "Mystery") fiction.children.create(:name => "Romance") fiction.children.create(:name => "Science Fiction") #END:setup def display_children(order) puts order.children.map {|child| child.name }.join(", ") end #START:demo display_children(root) # Fiction, Non Fiction sub_category = root.children.first puts sub_category.children.size #=> 3 display_children(sub_category) #=> Mystery, Romance, Science Fiction non_fiction = root.children.find(:first, :conditions => "name = 'Non Fiction'") display_children(non_fiction) #=> Art History, Computers, Science puts non_fiction.parent.name #=> Books #END:demo