Primero que nada: acaban de morir varios gatitos inocentes por la atrocidad esa de nombrar clases Pescado y Delfín, en lugar de Fish y Dolphin. Ruby está en inglés, así que a menos que escribas "si condición; <código>; fin" (que no conozco ningún interprete de ruby que te deje), el código deberías escribirlo de forma consistente :)
Segundo, el Deflín no es un pescado, es un mamífero ¬¬ Ahora, hablando en serio: ruby no es java/c#/c++/el lenguaje OOP que te guste y con el que estés familiarizado. No tiene clases abstractas. Sí, hay algunos hacks que podés hacer para que "parezcan" abstractas, pero siguen sin serlo. Y son el tipo de hacks por los cuales yo despediría gente (afortunadamente, no tengo a nadie a mi cargo para despedir, sino con lo quisquilloso que soy estaría más sólo que el uno :P). La forma "ActiveRecordense" de hacer lo que querés es usar Single Table Inheritance, como ya te lo han recomendado. Definís una clase Fish (:P), y de ella heredan Shark, Goldfish, Tuna, y todos los pescados que quieras. En tus controllers, vos manejás las subclases, y no tocás la clase padre (a menos que quieras crear algo genérico, o usarlo tipo Factory para crear objetos de acuerdo al input de un usuario—por ejemplo, el usuario en un <select> elige qué clase de pescado pescó hoy, y vos creás el adecuado en la base). Listo, no hay "abstract classes", no hay "final classes", y no hay métodos "protected" en ruby (ni privados, pero bueno, eso es para otro thread). No traten de hacer magia para hacer que ruby se parezca a <inserte lenguaje de programación aquí> Abrazo, -foca 2011/4/20 Paolo Loran <[email protected]>: > Mil gracias, ahora me quedo todo mas claro. > Lo voy a probar y cualquier cosa que me frene, les consulto. > > Saludos. > poli > > 2011/4/20 Lucas Tolchinsky <[email protected]> >> >> En el ejemplo de Roberto, cuando vos hacés Delfin.create, estarías creando >> un registro en la tabla Pescados cuyo type sería 'Delfin'. En resúmen, vos >> sólo tenés una tabla, Pescados con una columna type que indica a qué clase >> concreta pertenece. El esquema sería: >> class Pescado < ActiveRecord::Base >> class Delfin < Pescado >> Adjunto de paso un link sobre cómo implementar clases abstractas en ruby >> http://stackoverflow.com/questions/512466/how-to-implement-an-abstract-class-in-ruby >> >> Saludos! >> Tonchis >> >> PD: el delfín es un mamífero :D >> >> _______________________________________________ >> 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 > > _______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
