SomeThing::MyClass.new()
但是我在rake任务中从args中调用它,所以它以字符串形式出现:
task :blah,[:my_class_name] => :environment do |t,args| class_name = args[:my_class_name].camelize.constantize puts class_nameend
很明显,如果我像这样调用rake任务:
rake blah[my_class]
我的任务返回:
MyClass # <= Actual ruby object
但是我怎样才能让它在另一个方法之前链接的命名空间内运行,如下所示:
SomeThing::MyClass.new()
从作为输入提供的字符串?
解决方法 只需使用类名字符串并执行 *** 作,即可让您的生活更轻松Something.const_get(args[:my_class_name]).new
这是一个简化版本(普通IRB,没有Rails):
module Something ; endclass Something::MyClass ; endmy_class_name = "MyClass"Something.const_get(my_class_name).new #=> #<Something::MyClass:0x007fa8c4122dd8>总结
以上是内存溢出为你收集整理的ruby-on-rails – 使用Rails constantize inflector调用命名空间类全部内容,希望文章能够帮你解决ruby-on-rails – 使用Rails constantize inflector调用命名空间类所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)