Ruby on rails 你能用一个字符串找到一个可用的类吗?
我试图在调用中获取Class对象,但我能找到它的唯一位置是Ruby on rails 你能用一个字符串找到一个可用的类吗?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我试图在调用中获取Class对象,但我能找到它的唯一位置是params[:controller]。但这会返回一个字符串 我能找到一个只有字符串的类对象吗?对于字符串到类,可以使用string.constantize。但是,您正在寻找正在处理请求的当前控制器对象吗?对于类的字符串,您可以使用string.constantize。但是,您正在寻找正在处理请求的当前控制器对象吗?您可以通过以下方式将字符串转换为类: "class".capitalize.constantize 您可以通过以下方式将字
params[:controller]
。但这会返回一个字符串
我能找到一个只有字符串的类对象吗?对于字符串到类,可以使用string.constantize。但是,您正在寻找正在处理请求的当前控制器对象吗?对于类的字符串,您可以使用string.constantize。但是,您正在寻找正在处理请求的当前控制器对象吗?您可以通过以下方式将字符串转换为类:
"class".capitalize.constantize
您可以通过以下方式将字符串转换为类:
"class".capitalize.constantize
有一种方法可用于将字符串转换为适当命名的常量,与const\u get
结合使用应该是您所需要的。这里是一个简化的示例,我目前没有可用的Rails控制台:
ObjectSpace.const_get(“array”.capitalize).new#=>[]
在Rails中,类似于
"array".classify.constantize.new
也应该有效。有一种方法可以用来将字符串转换为适当命名的常量,与const_get
结合使用应该是您所需要的。这里是一个简化的示例,我目前没有可用的Rails控制台:
ObjectSpace.const_get(“array”.capitalize).new#=>[]
在Rails中,类似于
"array".classify.constantize.new
也应该可以工作。以下是如何在没有Rails/ActiveSupport的情况下完成这项工作
def constant_from_full_name(name)
name.split("::").inject(::Object) do |const_so_far, name_fragment|
const_so_far.const_get(name_fragment)
end
end
constant_from_full_name("Some::Path::To::My::Class")
下面介绍如何在没有Rails/ActiveSupport的情况下实现这一点
def constant_from_full_name(name)
name.split("::").inject(::Object) do |const_so_far, name_fragment|
const_so_far.const_get(name_fragment)
end
end
constant_from_full_name("Some::Path::To::My::Class")
从何处进行调用,以及您试图作为参数传递什么?如果您在控制器中,请使用
self
。也就是说,我非常怀疑传递一个控制器是否是一个好主意。您从哪里进行调用,您试图传递什么作为参数?如果您在控制器中,请使用self
。也就是说,我非常怀疑传递控制器是一个好主意。