在我的rails 3.1应用程序(使用ruby 1.9)中,我有一个deployer1类,它位于model目录下的worker子目录中
我正尝试使用以下代码动态加载/实例化该类:

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被正确配置为加载这个类,也许我加载它的方式不对……
编辑:
所以,根据弗拉德的回答,我的解决方案是:
deployer_class.constantize.new

谢谢
克里斯

最佳答案

尝试改用constantize

module Wtf
  class Damm
  end
end
#=> nil
'Wtf::Damm'.constantize
#=> Wtf::Damm
Object.const_get 'Wtf::Damm'
#=> Wtf::Damm

07-26 09:36