Je travaille avec une API Grape et j'ai des modèles qui ont un attribut url que j'utilise pour monter dynamiquement des points de terminaison. Je dois pouvoir les modifier et j'ai de la difficulté à les faire correctement enregistrer quand ils sont générés.Création d'une classe nommée dynamiquement dans l'espace de noms de module
Si je crée une classe dans un module, cette classe a un espace de noms. Cependant, si je crée dynamiquement la classe au sein d'un module, ce n'est pas un espace de noms.
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
Existe-t-il un moyen d'espace de noms une classe créée dynamiquement?
vous pouvez simplement faire 'const_set', pas besoin de' Object.' –
Eh bien, vous * explicitement * dire à Ruby de définir la constante dans 'Object', qu'attendez-vous? Vous pouvez * explicitement * dire à Ruby de mettre la constante ailleurs * exactement de la même manière *. –
Merci Max! Jorg, tu as raison, mais dans ce cas Max a frappé le clou sur la tête. Je devrais l'avoir mis dans la portée actuelle. –