如何使用Ruby / Rails中的namespaces /子目录动态加载类?
发布时间:2020-12-17 04:26:13 所属栏目:百科 来源:网络整理
导读:在我的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
在我的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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |