2010-08-15 4 views

Répondre

4
SomeModel.instance_methods(false) & BaseModel.instance_methods 

Le false fait instance_methods comprennent pas les méthodes héritées. Nous utilisons ensuite set intersection pour trouver toutes les méthodes qui ont été définies sur SomeModel qui ont déjà été définies sur BaseModel (ou Object).

+0

pas du tout, c'est super malade. Merci! –

+1

BTW: si vous ne connaissez pas au préalable la superclasse directe de 'SomeModel', vous pouvez utiliser' SomeModel.superclass' au lieu de 'BaseModel'. De cette façon, vous pouvez intégrer cette fonctionnalité dans une méthode réutilisable. Quelque chose comme 'Class Class; def overriden_methods; instance_methods (false) & superclass.instance_methods end end' Et ensuite: 'SomeModel.overriden_methods' –

+0

Sachez, cependant, que ceci n'attrapera pas les cas où SomeModel mélangeait un module qui définissait create(). Cette expression ne vous donnera que les méthodes que SomeModel a directement remplacées. –

Questions connexes