在我的Rails 3.1的应用程序(使用Ruby 1.9),我有一个Deployer1类是在下面的模式目录如何在Ruby/Rails中使用namespaces /子目录动态加载类?
我试图加载工人子目录/动态实例化这个类与此代码:
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 =“工人:: Deployer1”) - 提供有关失踪不变错误,我相信这意味着它找不到课程。
我通常可以访问类在我的Rails代码以静态方式(工人:: Deployer1.new) - 所以Rails的正确配置为加载此,也许我加载了错误的方式...
编辑: 所以,按照弗拉德的答案,我去解决的办法是:
deployer_class.constantize.new
感谢 克里斯
谢谢弗拉德 - 正是我需要的。 –