[Ror-es] #include en ruby

Pedro Visintin pedro.visintin at gmail.com
Sat Sep 23 01:41:08 GMT 2006


Alguien estuvo viendo el tema de traits para ruby?

http://raa.ruby-lang.org/project/traits/

Saludos

P

On 9/22/06, Sebastian Delmont <sd at notso.net> wrote:
>
> No, ese codigo se ejecuta una sola vez, al momento de cargar "client.rb"
> Claro, esta solucion es un poco "sucia".
>
> Como te abras dado cuenta, el problema en Rails es que no puedes crear una
> clase "Persona" de la cual derivar "Cliente" y "Empleado", a menos que
> pienses guardar todos los objetos en una misma tabla (usando lo que se
> conoce como "Single Table Inheritance").
>
> La solucion es emplear modulos.
>
> module PersonCommon
>   ...
>   def name
>     self[:name].capitalize
>   end
>   ...
> end
>
> class Client < ActiveRecord::Base
>   include PersonCommon
> end
>
> class Employee < ActiveRecord::Base
>   include PersonCommon
> end
>
>
> El unico problema con los modulos es que no puedes definir "metodos de
> clase" (algo como Client.find_special). Pero hay una solucion bastante
> comun: Emplear el metodo append_features de la clase Module, que es invocado
> cada vez que un modulo es incluido en otra clase o modulo:
>
> module PersonCommon
>   module ClassMethods
>     def special_find
>        ...
>     end
>   end
>
>   def self.append_features(included_on)
>     included_on.extend ClassMethods
>   end
>
>   def mas_metodos_de_instancia
>      ...
>   end
> end
>
> De esta manera, ahora puedes hacer Client.find_special, o @client.name o
> Employee.find_special o @employee.name, etc, etc...
>
> Espero que esta breve explicacion sea suficiente para activar tu
> curiosidad :-)
>
>
>
> On Sep 22, 2006, at 6:34 PM, Esteban wrote:
>
> Para mi sorpresa usar herencia no funcionó, en cambio la sugerencia de
> Sebastian Delmont si, con leves cambios
>
> class Client < ActiveRecord::Base
>     eval(IO.read('app/models/client_common.rb'))
>     ...
> end
>
> Ahora me pregunto si "eval" se está ejecutando cada vez que instancio un
> objecto de esta clase?
>
>
> Gracias a todos
>
>
> Sebastian Delmont wrote:
>
> perdon... eval(File.read(...))
>
> On Sep 21, 2006, at 2:27 PM, Juan Lupión wrote:
>
>    żHas probado a crear una clase ClienteAbstracto que contenga el código
> común y que herede de ActiveRecord::Base y luego hacer que Cliente y
> VClient hereden de ClienteAbstracto?
> --
> ----------------------------------------------------
> http://hronia.blogalia.com
> _______________________________________________
> Ror-es mailing list
> Ror-es at lists.simplelogica.nethttp://lists.simplelogica.net/mailman/listinfo/ror-es
>
>  _______________________________________________
> Ror-es mailing list
> Ror-es at lists.simplelogica.nethttp://lists.simplelogica.net/mailman/listinfo/ror-es
>
>
> _______________________________________________
> Ror-es mailing list
> Ror-es at lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>
>
>
> _______________________________________________
> Ror-es mailing list
> Ror-es at lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>
>
>
>


-- 
Pedro   Visintin .  I T   S o l u t i o n s   A r c h i t e c t
Ruby On Rails Argentina. http://blogs.onrails.com.ar
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.simplelogica.net/pipermail/ror-es/attachments/20060923/e06d6ba8/attachment.htm 


More information about the Ror-es mailing list