В моем приложении Rails 3.1 (с Ruby 1. 9), у меня есть класс Deployer1, который находится в worker подкаталоге ниже model каталога
Я пытаюсь загрузить/создать этот класс динамически с помощью этого кода:
clazz = item.deployer_class # deployer_class is the class name in a string
deployer_class = Object.const_get clazz
deployer = deployer_class.new
Если я не использую пространства имен, например, что-то глобальное, как это:
class Deployer1
end
Тогда все работает нормально (deployer_class="Deployer1") - он может загрузить класс и создать объект.
Если я попытаюсь поместить его в модуль, чтобы немного разграничить пространства имен, например, так:
module Worker
class Deployer1
end
end
Он не работает (deployer_class="Worker::Deployer1") - выдает ошибку об отсутствии константы, что, как я полагаю, означает, что он не может найти класс.
Я могу получить доступ к классу в целом в моем Rails коде статическим способом (Worker::Deployer1.new) - так что Rails настроен правильно для загрузки этого класса, возможно, я загружаю его неправильно...
EDIT: Итак, в соответствии с ответом Влада, решение, которое я выбрал:
deployer_class.constantize.new
Спасибо. Chris