J'ai rien compris.
En gros, tu as un mixin Element, tu as des classes que tu vas faire hériter d'ActiveRecord::Base et dans lesquelles tu vas mixer Element, et tu voudrais savoir comment -- dans les méthodes définies dans Element, et qui seront donc après mixage accessibles dans tes classes -- utiliser les méthodes d'AR::Base genre #find?
Ben tu le fais, tout simplement. Je rappelle que Ruby c'est du late binding toussa, donc la résolution des noms et des méthodes se fait au moment de leur appel et pas avant:
Code :
#element.rb module Element def mixed_in self.foo end end
|
Code :
#test.rb require 'element' class Foo def foo "This will appear in Baz" end end class Bar < Foo def mixed_in "no mixin in Bar" end end class Baz < Foo include Element end class Buzz < Foo include Element def foo "redefined foo in Buzz" end end puts "Bar: ", Bar.new.mixed_in puts "Baz: ", Baz.new.mixed_in puts "Buzz: ", Buzz.new.mixed_in
|
$ ruby test.rb Bar: no mixin in Bar Baz: This will appear in Baz Buzz: redefined foo in Buzz $ |
La classe Foo correspond à ActiveRecord::Base (j'aurais pu la mettre dans un autre fichier, mais ça n'aurait rien changé), le module Element correspond à ton mixin, et les classes Bar, Baz et Buzz correspondent aux classes que tu vas dériver de Foo.
edit: et accessoirement, Element ne correspondrait absolument pas à une classe abstraite java, il n'y a pas moyen d'exprimer facilement un héritage de comportement en java, tu serais obligé de créer une interface soir pour Element soit pour AR:Base et tu aurais à réimplémenter tout le comportement de l'un des deux.
Message édité par masklinn le 07-09-2007 à 10:16:07
---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody