ruby-on-rails - 使用 Rails constantize inflector 调用命名空间类

标签 ruby-on-rails ruby

我有一个需要初始化的类,但它的命名空间如下:

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 constantize inflector 调用命名空间类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9800520/

相关文章:

javascript - 有效的 geoJson 未填充 Google map 标记

ruby-on-rails - Rails 中的货币转换

javascript - 为什么我的字符串只有在我手动输入时才有效?

mysql2 gem 安装错误

ruby-on-rails - 升级到 Rails 3.2 后回形针更改图像路径

ruby-on-rails - 如何在 ruby​​ on rails 中显示父表列名?

ruby - 局部变量、实例变量和类变量有什么区别?

ruby - 尝试用 Ruby 显示气球通知

ruby-on-rails - 确保模型属性始终小写和剥离的最佳方法?

ruby-on-rails - 显示配置文件名称而不是配置文件 ID