Salim a écrit, le 09/03/2008 06:42 PM :
>
>>> dog.foo
>>>       
> => "bar Animal"
>   
>>> man.pet.foo
>>>       
> => "foo Object"
>
> Quelqu'un saurait-il expliquer pourquoi à travers l'association,
> l'objet 'Dog' ne parvient pas à hériter de la méthode 'foo' de sa
> classe parente ???
>   

Parce que man.pet n'est pas un objet Dog, mais un AssociationProxy. Ce 
dernier implémente des méthodes permettant d'éviter de créer l'objet Dog 
en mémoire dans certaines situations, elles sont codées directement dans 
l'AssociationProxy (c'est pourquoi sur un habtm ou has_many l'appel à 
count fait un SELECT count(*) en base au lieu de charger tous les objets 
de la relation). Si l'objet n'a pas la méthode, method_missing peut 
alors (si nécessaire) créer l'objet Dog et lui passer le message.
Comme foo est dans Objet, il est également dans l'AssociationProxy...

Solution : ne pas polluer la classe Object avec foo, c'est extrèmement 
fragile comme pratique. Selon ton besoin on pourra essayer de te 
proposer quelque chose de plus élégant et en tout cas de robuste.

Lionel

--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse [EMAIL PROTECTED]
-~----------~----~----~----~------~----~------~--~---

Répondre à