Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 你能用一个字符串找到一个可用的类吗?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 你能用一个字符串找到一个可用的类吗?

Ruby on rails 你能用一个字符串找到一个可用的类吗?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我试图在调用中获取Class对象,但我能找到它的唯一位置是params[:controller]。但这会返回一个字符串 我能找到一个只有字符串的类对象吗?对于字符串到类,可以使用string.constantize。但是,您正在寻找正在处理请求的当前控制器对象吗?对于类的字符串,您可以使用string.constantize。但是,您正在寻找正在处理请求的当前控制器对象吗?您可以通过以下方式将字符串转换为类: "class".capitalize.constantize 您可以通过以下方式将字

我试图在调用中获取Class对象,但我能找到它的唯一位置是
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
。也就是说,我非常怀疑传递控制器是一个好主意。