[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