Ich arbeite mit einer Grape-API und ich habe Modelle, die ein URL-Attribut haben, mit dem ich Endpunkte für dynamisch zu mounten. Ich muss in der Lage sein, sie zu versionieren, und ich habe Probleme, sie zu erhalten, um richtig benannt zu werden, wenn sie erzeugt werden.Erstellen Sie dynamisch benannte Klasse in Modul-Namespace
Wenn ich eine Klasse innerhalb eines Moduls erstellen, ist diese Klasse Namespace.
module MyModule
module SubModule
class MyClass
end
end
end
=> nil
MyModule::SubModule::MyClass
=> MyModule::SubModule::MyClass
Wenn ich jedoch dynamisch die Klasse innerhalb eines Moduls erstellen, ist es nicht Namespace.
module MyModule
module SubModule
dynamic_name = "ClassName"
Object.const_set(dynamic_name, Class.new)
end
end
=> ClassName
MyModule::SubModule::ClassName
NameError: uninitialized constant MyModule::SubModule::ClassName
ClassName
=> ClassName
Gibt es eine Möglichkeit, Namespace eine dynamisch erstellte Klasse?
Sie können einfach 'const_set', keine Notwendigkeit für' Object.' –
Nun, Sie * explizit * Ruby die Konstante in 'Objekt zu setzen, was haben Sie erwartet? Sie können * explizit * Ruby mitteilen, die Konstante an anderer Stelle in genau der gleichen Weise * zu setzen. –
Danke Max! Jörg, du hast recht, aber in diesem Fall hat Max den Nagel auf den Kopf getroffen. Ich hätte es im aktuellen Umfang einstellen sollen. –