How to implement Active Record inheritance in Ruby on Rails?

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/

Leave a Comment