Dynamisches Laden von Klassen: Gibt es ein "method_missing" für Klassen in Ruby?

8

In einer Rails-Anwendung, an der ich arbeite, habe ich ein Modell "Type", das sich auf das Single-Table-Vererbungsmodell "Node" bezieht: Jede mögliche Unterklasse von Node ist in der types-Tabelle als Type definiert / p>

Im Moment ist es möglich, alle Klassen in einem Initialisierer zu laden, aber ich möchte die Unterklassen nur laden, wenn sie benötigt werden.

Die beste Lösung, die ich mir vorstellen kann, wäre ein Fallback auf eine nicht initialisierte Konstante, die prüfen würde, ob diese Konstante eine Klasse in der Anwendung darstellen kann, ähnlich wie method_missing.

Ich hätte gerne Ratschläge, wie und wo diese Logik definiert werden soll oder ob es eine bessere Lösung gibt.

    
amencarini 22.06.2011, 08:27
quelle

4 Antworten

11

Es gibt Module#const_missing :

Ссылка

Ich nehme an, Sie können (ab) das für Ihre Bedürfnisse verwenden.

    
Michael Kohl 22.06.2011, 08:36
quelle
14

Ich weiß nicht, ob das neu ist, aber wie ich dachte, es war es wert, hinzugefügt zu werden. Es ist möglich, die Methode missing als Klassenmethode zu verwenden

%Vor%     
Peter Saxton 30.11.2014 20:43
quelle
4

es gibt die Methode const_missing: Sie funktioniert wie method_missing, aber es geht um Konstanten

Ссылка

    
Andrea Pavoni 22.06.2011 08:36
quelle
-1

Vielleicht kannst du rescue einen undefinierten konstanten Fehler machen und deine Klassen laden / erstellen.

    
edgerunner 22.06.2011 08:29
quelle

Tags und Links