A new project I am working on using Rails 2.3.11 introduced me to acts_as_list and acts_as_tree, so I decided to look for those for use with Rails 3.

I did a quick search and stumbled upon nested set. Its about as dead-simple as I could imagine, so I’m giving it a try.

To use it, I modified my migration to this:

class CreateAccounts < ActiveRecord::Migration
  def self.up
    create_table :accounts do |t|
      t.string :name
      t.integer :parent_id
      t.string :type
      t.integer :lft
      t.integer :rgt

      t.timestamps
    end
  end

  def self.down
    drop_table :accounts
  end
end

and the model to look like this:

class Account < ActiveRecord::Base
  ACCOUNT_TYPES = ["Asset", "Liability", "Equity", "Revenue", "Expense"]

  validates_uniqueness_of :name

  acts_as_nested_set
end

So far, so good!