module ActiveRecord::Inheritance::ClassMethods

def new(attributes = nil, &block)

instance of the given subclass instead of the base class.
and if the inheritance column is attr accessible, it initializes an
Determines if one of the attributes passed in is the inheritance column,
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? && scope_attributes = current_scope&.scope_for_create
      subclass = subclass_from_attributes(scope_attributes)
    end
    if subclass.nil? && base_class?
      subclass = subclass_from_attributes(column_defaults)
    end
  end
  if subclass && subclass != self
    subclass.new(attributes, &block)
  else
    super
  end
end