Señor Foca,

Algo me hace ruido de lo que dijo. La parte de que Ruby no tiene protected y private. Tener tiene. Usarse en el caso de protected creo que es raro porque Ruby no parece apuntar a heredar clases y private, bueno, de esos si hay. ¿ A qué se referia, señor foca?

On 04/20/2011 04:44 PM, Nicolás Sanguinetti wrote:
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

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

Responder a