class ActiveRecord::Reflection::ThroughReflection

def check_validity!

def check_validity!
  if through_reflection.nil?
    raise HasManyThroughAssociationNotFoundError.new(active_record.name, self)
  end
  if source_reflection.nil?
    raise HasManyThroughSourceAssociationNotFoundError.new(self)
  end
  if options[:source_type] && source_reflection.options[:polymorphic].nil?
    raise HasManyThroughAssociationPointlessSourceTypeError.new(active_record.name, self, source_reflection)
  end
  if source_reflection.options[:polymorphic] && options[:source_type].nil?
    raise HasManyThroughAssociationPolymorphicError.new(active_record.name, self, source_reflection)
  end
  unless [:belongs_to, :has_many, :has_one].include?(source_reflection.macro) && source_reflection.options[:through].nil?
    raise HasManyThroughSourceAssociationMacroError.new(self)
  end
  check_validity_of_inverse!
end