I want to use a column called type
without invoking Single Table Inheritance (STI) - I just want type
to be a normal column that holds a Stri
You can override the STI column name using set_inheritance_column:
class Pancakes < ActiveRecord::Base
set_inheritance_column 'something_you_will_not_use'
#...
end
So pick some column name that you won't use for anything and feed that to set_inheritance_column
.
In Rails 3.1 set_inheritance_column
is deprecated, also you can just use nil
as a name, like this:
class Pancakes < ActiveRecord::Base
self.inheritance_column = nil
#...
end
If you want to do this for all models, you can stick this in an initializer.
ActiveSupport.on_load(:active_record) do
class ::ActiveRecord::Base
# disable STI to allow columns named "type"
self.inheritance_column = :_type_disabled
end
end
Rails 4.x
I encountered the problem in a Rails 4
app, but in Rails 4 the set_inheritance_column
method does not exist at all so you can't use it.
The solution that worked for me was to disable the single table inheritance by overriding ActiveRecord
’s inheritance_column
method, like this:
class MyModel < ActiveRecord::Base
private
def self.inheritance_column
nil
end
end
Hope it helps!
I know this question is rather old and this deviates a bit from the question you are asking, but what I always do whenever I feel the urge to name a column type or something_type is I search for a synonym of type and use that instead:
Here are a couple alternatives: kind, sort, variety, category, set, genre, species, order etc.