在Ruby中按名称获取类

app*_*ief 2 ruby

我有两节课

class ClassOne
    def do_something
      [...]
    end
end

class ClassTwo
    def do_something
      [...]
    end
end
Run Code Online (Sandbox Code Playgroud)

我从数据库中获取了一个类名(ClassOne或ClassTwo),我想do_something在该类中调用

所以我有

class_name = "ClassOne"
Run Code Online (Sandbox Code Playgroud)

我想调用ClassOne.do_something或者ClassTwo.do_something如果class_name等于"ClassTwo".

我不能使用简单的if条件,我有很多类,并在调用之前检查类是否存在.

有办法吗?

Ser*_*sev 6

对于香草红宝石:

Kernel.const_get('ClassOne').do_something
Run Code Online (Sandbox Code Playgroud)

对于Rails:

'ClassOne'.constantize.do_something
Run Code Online (Sandbox Code Playgroud)

  • 或者保留类,然后调用`Kernel.const_get('ClassOne').new.do_something` /`'ClassOne'.constantize.new.do_something` (2认同)