Estoy intentando crear una instancia de un objeto de la clase AR abstracta con fines de prueba. El modelo de define así:Rails 3 Objetos abstractos de ActiveRecord
class Basic < ActiveRecord::Base
self.abstract_class = true
def stuff
raise NotImplementedError
end
end
Cuando intento Basic.new
, me sale:
"Mysql2::Error: Table 'project_development.basics' doesn't exist"
¿Es un comportamiento normal? ¿Las clases AR abstractas no están destinadas a ser instanciadas incluso sin (obviamente imposible) persistencia?
Usando 1.9.2-p136 con Rails 3.0.4/0.2.6 mysql2
Editar:
Resulta que el error es causado por definiciones de columna, que en el caso de una el modelo abstracto no se puede recuperar de la base de datos.
class Basic < ActiveRecord::Base
self.abstract_class = true
@columns = []
end
Funciona como un encanto.
A los programadores de Ruby no les gustan las clases abstractas. ¿Incluir módulos no funciona para usted? http://stackoverflow.com/questions/512466/how-to-implement-an-abstract-class-in-ruby – tokland
@tokland; De Verdad? Tendría que estar en desacuerdo con eso. Las clases abstractas son muy útiles y se usan con mucha frecuencia. 'ActiveRecord :: Base' es una clase abstracta, por ejemplo. Sin embargo, estoy de acuerdo en que la forma en que algunas personas usan clases abstractas podría ser mejor servida mediante el uso de módulos. – idlefingers
@idlefingers. Lo siento, fue una afirmación demasiado audaz, de hecho, las clases abstractas pueden ser útiles en ciertos escenarios. – tokland