La respuesta de John Topley es realmente malo. Establecer abstract_class = true en la clase base hará que las clases secundarias dejen de configurar su tipo automáticamente. Además, a menos que configure set_table_name en la clase base, las clases secundarias se quejarán de que su tabla no existe.
Esto se debe a que el objetivo de abstract_class = true es configurar la herencia cuando NO está utilizando STI y desea tener una clase abstracta (clase no respaldada por una tabla db) en su jerarquía de clases entre ActiveRecord :: Base y una o más clases modelo.
Tener initialize raise es una solución, también agregar validates_presence_of: type a la clase base es una solución.
Nota Si anular initialize, tiene que llamar súper:
def initialize(*args)
raise "Cannot directly instantiate an AbstractUser" if self.class == AbstractUser
super
end
Dado que BaseClass probablemente descenderá de ActiveRecord :: Base, initialize probablemente deba llamar a super. – Douglas