如何在ruby中动态调用Class方法

j_m*_*lly 8 ruby ruby-on-rails ruby-on-rails-3

假设我将模型名称保存在变量中:

"#{class_name.singularize}"
Run Code Online (Sandbox Code Playgroud)

从另一个控制器我想看到为这个模型定义的列.我试过了

send("#{class_name.singularize}.columns")
Run Code Online (Sandbox Code Playgroud)

但它试图将Page.columns我作为班级的一种方法,而不是Page班级.关于如何做到这一点的任何想法?

And*_*all 13

用途constantize:

class_name.singularize.constantize.columns
Run Code Online (Sandbox Code Playgroud)

  • 也许稍微无关紧要,但知道`constantize`是一个rails构造可能会很有趣.等效的ruby表达式是`Object.const_get('SomeString')` (15认同)