我有一个需要初始化的类,但是它的命名空间是这样的:
SomeThing::MyClass.new()
但是我在rake任务中从args调用它,所以它以字符串形式出现:
task :blah, [:my_class_name] => :environment do |t, args|
class_name = args[:my_class_name].camelize.constantize
puts class_name
end
所以很明显,如果我这样调用rake任务:
rake blah[my_class]
我的任务返回:
MyClass # <= Actual ruby object
但是我如何才能使其在另一个方法之前链接的命名空间中运行,如下所示:
SomeThing::MyClass.new()
从提供的字符串作为输入?
最佳答案
您只需使用类名的字符串并执行以下操作,便可以使您的生活更轻松
Something.const_get(args[:my_class_name]).new
这是一个简化的版本(普通IRB,无Rails):
module Something ; end
class Something::MyClass ; end
my_class_name = "MyClass"
Something.const_get(my_class_name).new
#=> #<Something::MyClass:0x007fa8c4122dd8>
关于ruby-on-rails - 用Rails常量化变形器调用命名空间类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9800520/