En mis Rails 3.1 aplicación (con Ruby 1.9), tengo una clase Deployer1 que está en un trabajador subdirectorio por debajo de la modelo directorio¿Cómo cargar dinámicamente la clase utilizando espacios de nombres/subdirectorio en Ruby/Rails?
Estoy tratando de cargar/crear instancias de esta clase de forma dinámica con esta código:
clazz = item.deployer_class # deployer_class is the class name in a string
deployer_class = Object.const_get clazz
deployer = deployer_class.new
Si yo no espacios de nombres, por ejemplo, el uso de algo global como esta:
class Deployer1
end
Entonces funciona bien (deployer_class = "Deployer1") - puede cargar la clase y crear el objeto.
Si lo intento y lo puse en un módulo de espacio de nombres que sea un poco, de esta manera:
module Worker
class Deployer1
end
end
Es no funciona (deployer_class = "Trabajador :: Deployer1") - da un error por perder constante, lo cual creo que significa que no puede encontrar la clase.
puedo acceder a la clase en general, en mi código de rieles de una manera estática (Trabajador :: Deployer1.new) - por lo que los carriles está configurado correctamente para cargar esto, tal vez Estoy cargando el camino equivocado ...
EDIT: Así, de acuerdo con la respuesta de Vlad, la solución fui a es:
deployer_class.constantize.new
Gracias Chris
Gracias Vlad - justo lo que necesitaba. –