gpt4 book ai didi

ruby - 如何在 Ruby/Rails 中使用命名空间/子目录动态加载类?

转载 作者:数据小太阳 更新时间:2023-10-29 06:55:54 30 4
gpt4 key购买 nike

在我的 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

如果我不使用 namespace ,例如像这样的全局名称:

class Deployer1
end

然后它工作正常 (deployer_class="Deployer1") - 它可以加载类并创建对象。

如果我尝试将它放入一个模块中以对它进行一些命名,如下所示:

module Worker
class Deployer1
end
end

它不起作用 (deployer_class="Worker::Deployer1") - 给出一个关于缺少常量的错误,我认为这意味着它找不到类。

我通常可以在我的 Rails 代码中以静态方式访问该类 (Worker::Deployer1.new) - 因此 Rails 已正确配置以加载它,也许我以错误的方式加载它...

编辑:因此,根据 Vlad 的回答,我寻求的解决方案是:

deployer_class.constantize.new

谢谢克里斯

最佳答案

尝试使用 constantize相反:

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

关于ruby - 如何在 Ruby/Rails 中使用命名空间/子目录动态加载类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7606757/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com