Disabling ActiveRecord "type" column subclassing

13 views
Skip to first unread message

Allen Fair

unread,
Mar 28, 2007, 11:34:44 AM3/28/07
to rubyonra...@googlegroups.com
Hi! I have a legacy table that has a column named "type" and need to
remove this automatic subclassing by ActiveRecord. The api pages are
vague about this, and I tried

self.inheritance_column = "xtype"

which seemed to get me half-way. In the validate_on_create method, the
value of self.type was my model Class name.

How would you disable this feature?

--
Posted via http://www.ruby-forum.com/.

Philip Hallstrom

unread,
Mar 28, 2007, 11:51:17 AM3/28/07
to rubyonra...@googlegroups.com
> Hi! I have a legacy table that has a column named "type" and need to
> remove this automatic subclassing by ActiveRecord. The api pages are
> vague about this, and I tried
>
> self.inheritance_column = "xtype"
>
> which seemed to get me half-way. In the validate_on_create method, the
> value of self.type was my model Class name.
>
> How would you disable this feature?

If you want to check 'type' do self['type']..

MichaelLatta

unread,
Mar 28, 2007, 10:24:42 PM3/28/07
to Ruby on Rails: Talk
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

On Mar 28, 8:34 am, Allen Fair <rails-mailing-l...@andreas-s.net>
wrote:

Jaime B.

unread,
Feb 18, 2013, 7:01:56 PM2/18/13
to rubyonra...@googlegroups.com
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.

Rob Biedenharn

unread,
Feb 19, 2013, 8:48:08 AM2/19/13
to rubyonra...@googlegroups.com
On Feb 18, 2013, at 7:01 PM, Jaime B. wrote:

> 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

>
> 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.
>
> --
> Posted via http://www.ruby-forum.com/.
>
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

Utile Bout

unread,
Feb 26, 2014, 3:40:01 PM2/26/14
to rubyonra...@googlegroups.com
Simply use
class MyModel < ActiveRecord::Base
self.inheritance_column = 'somthing_not_type'
end
Reply all
Reply to author
Forward
0 new messages