Hola paolo, podrias usar "Single table inheritance" (http://www.martinfowler.com/eaaCatalog/singleTableInheritance.html), la idea seria definir todos los atributos de todos los subtipos de pescados que tuvieras en la misma tabla pescado, mas un atributo llamado type que contendra el nombre de la clase del pescado, ejm:

tabla pescados
id    nombre  color . ...  type
1  'delfin',  'gris', .... ,  'Delfin'
2  'tiburon',  ......         'Tiburon'

luego tendras un modelo para la clase abstracta y para las concretizaciones, Pescado, Delfin, Tiburon. Cuando en una instancia asignes el campo type, AR internamente intentara instanciar un objeto del tipo definido en ese campo, asi podras hacer cosas como Delfin.all o Tiburon.all.

Hay otras formas de definir el modelo relacional, en lugar de poner todos los campos en una misma tabla podrias crear tablas para cada tipo y relacionarlas mediantes foreing keys, te dejo una breve descripcion:

http://www.fortunecity.com/lavender/dale/1054/base/extendido.htm (apartado 6.1. Relaciones Superclase/Subclase y Especialización/ Generalización.)

espero te sirva de ayuda.

Saludos
 



       

On 20/04/11 15:04, Paolo Loran wrote:
Buenos dias, mi consulta esta dirijida a como maneja ActiveRecord a las clases Abstractas y el tema de Herencia, ya que no me queda muy claro su funcionamiento y uso.
Ejemplo del Mundo Acuatico :D :

Pescado (nombre, color, tamaño)
    |--------Delfin (salta_el_aro , grita)
    |--------Tiburon (dientes)

Por lo que entiendo la clase Pescado seria una clase Abstracta la cual tendria definido entre sus atributos a nombre, color y tamaño, y por otro lado deberia tener a Delfin como una clase concreta que heredara de Pescado (al igual que tiburon).
En mi "Sistema del Mundo Acuatico" nunca crearia nuevos pescados, pero si nuevos delfines y tiburones, sino entiendo mal esto deberia estar reflejado en el modelo no es asi?.
Por otro lado veo que debería tener creada una tabla en mi BD de nombre pescado que posea a todos los atributos tanto de Pescado, Delfin y Tiburon, no es asi? lo que implicaría tener muchos campos con null, mi pregunta viene a eso, es manejaba el desperdicio de espacio en la BD de alguna forma? estoy utilizando SQLite3, debería tirarme a una opcion com PostgreSQL? que me dicen.

Saludos, atte.
poli
_______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a