Determines if one of the attributes passed in is the inheritance column,
and if the inheritance column is attr accessible, it initializes an
instance of the given subclass instead of the base class.
# File activerecord/lib/active_record/inheritance.rb, line 50
def new(attributes = nil, &block)
if abstract_class? || self == Base
raise NotImplementedError, "#{self} is an abstract class and cannot be instantiated."
end
if has_attribute?(inheritance_column)
subclass = subclass_from_attributes(attributes)
if subclass.nil? && base_class == self
subclass = subclass_from_attributes(column_defaults)
end
end
if subclass && subclass != self
subclass.new(attributes, &block)
else
super
end
end