Bonjour, voici le problème que je rencontre en essayant de faire de la
STI :
J'ai une classe abstraite 'Animal' qui assez simple :

class Animal < ActiveRecord::Base
  def foo
    "bar Animal"
  end
end

et une classe 'Dog' censée la specialiser :

class Dog < Animal
end

De plus j'ai l'association 1:1 ci-après entre un modèle 'Man' et mon
modèle 'Dog' :

class Man < ActiveRecord::Base
  has_one :pet, :class_name => "Dog"
end

Enfin, pour des raisons techniques, la méthode 'foo' est aussi
implémentée dans la classe 'Object' comme ceci :

class Object
  def foo
    "foo Object"
  end
end

(Tous les sources sont dispos à l'URL suivante : http://pastie.org/265300)
En essayant de jouer avec ce modèle j'obtiens les bizarreries
suivantes :

>> dog = Dog.create
=> #<Dog id: 1, man_id: nil, type: "Dog", created_at: "2008-09-03
18:33:52", updated_at: "2008-09-03 18:33:52">
>> man = Man.create
=> #<Man id: 1, created_at: "2008-09-03 18:34:06", updated_at:
"2008-09-03 18:34:06">
>> man.pet = dog
=> #<Dog id: 1, man_id: 1, type: "Dog", created_at: "2008-09-03
18:33:52", updated_at: "2008-09-03 18:34:21">
>> 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 ???

La seule manière d'obtenir le comportement souhaité est d'expliciter
ceci :
>> man.pet.becomes(Dog).foo
=> "bar Animal"

Merci d'avance,

Salim
--~--~---------~--~----~------------~-------~--~----~
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 à