Как динамически загрузить класс с помощью пространства имен/подкаталога в Ruby/Rails?

В моем приложении 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

7
задан halfelf 18 December 2018 в 07:32
поделиться