Rails supports Single Table Inheritance.
From the AR docs:
Active Record allows inheritance by
storing the name of the class in a
column that by default is named “type”
(can be changed by overwriting
Base.inheritance_column). This means
that an inheritance looking like this:class Company < ActiveRecord::Base; end class Firm < Company; end class Client < Company; end class PriorityClient < Client; end
When you do Firm.create(:name =>
“37signals”), this record will be
saved in the companies table with type
= “Firm”. You can then fetch this row again using Company.find(:first, “name
= ‘37signals’”) and it will return a Firm object.If you don‘t have a type column
defined in your table, single-table
inheritance won‘t be triggered. In
that case, it‘ll work just like normal
subclasses with no special magic for
differentiating between them or
reloading the right type with find.
A pretty good tutorial is here: http://juixe.com/techknow/index.php/2006/06/03/rails-single-table-inheritance/