[Ror-es] #include en ruby
Sebastian Delmont
sd at notso.net
Sat Sep 23 01:00:00 GMT 2006
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.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
>>
>>
>
> _______________________________________________
> Ror-es mailing list
> Ror-es at lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.simplelogica.net/pipermail/ror-es/attachments/20060923/24bb2398/attachment-0001.htm
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2407 bytes
Desc: not available
Url : http://lists.simplelogica.net/pipermail/ror-es/attachments/20060923/24bb2398/attachment-0001.bin
More information about the Ror-es
mailing list