Disabling ActiveRecord "type" column subclassing

The short answer is that you can not disable this. The 'type' method is a Ruby method for the class of an object. As stated by Philip you can access the 'type' column data by directly indexing the active record. You can also create a facade by having methods on the class that retrieve the 'type' column using a different name as in:

def legacy_type   return self[:type] end

def legacy_type=(value)   self[:type] = value end

Michael

MichaelLatta wrote in post #227241:

The 'type' method is a Ruby method for the class of an object.

This is not a Ruby method. This is part of ActiveRecord, and is used by Rails to manage single-table inheritance.

I'm adding a solution for future askers. This applies to Rails 3:

class ExampleModel < ActiveRecord::Base   set_inheritance_column do     'disabled'   end end

This changes the name of the column that ActiveRecord looks for, to use for STI. As long as you pick something that doesn't actually match any of your column names, it has the effect of disabling inheritance altogether.

MichaelLatta wrote in post #227241:

The 'type' method is a Ruby method for the class of an object.

This is not a Ruby method. This is part of ActiveRecord, and is used by Rails to manage single-table inheritance.

While it is true that 'type' is not a method in Ruby 1.9, it was in earlier versions:

irb1.8.7> 1.type (irb):1: warning: Object#type is deprecated; use Object#class #1.8.7 => Fixnum

It is something to keep in mind whenever looking at older code.

-Rob