在Ruby中生成动态类和实例方法

时间:2017-05-19 01:50:40

标签: ruby-on-rails ruby

我想在Ruby中生成完整的类,扩展其他类。例如,我有我的功能:

def generator(classname, methodname, ModelClass)
  # make the class
  # now make the instance method on the class
end

并调用它会生成如下所示的类:

generator 'ArticlesController' 'save' 'Article'

class ArticlesController < ApplicationController
  def save 
    @generated_params = # generate params from Article
    @item = Article.new(@generated_params)
    @item.save
  end
end

除了我可以根据一些输入创建新类。

1 个答案:

答案 0 :(得分:2)

对于您的案例代码将是这样的:

def generator(classname, methodname, arbitrary_class = ArbitraryClass)
  klass = Class.new(Parent) do
    define_method(methodname) do |*args, &block|
      @generated_params = # generate params from method_arg
      @item = arbitrary_class.new(@generated_params)
      @item.save
    end
  end
  Object.const_set classname, klass
end

这段代码做了三件事:

  1. 创建一个匿名类
  2. 向新班级添加方法
  3. 将新班级与classname常量
  4. 相关联

    此代码也没有收到生成的类的父类,我希望它很容易添加。生成的方法可以接收任意数量的参数,它们可以通过args获得。

    更新:我将在这里添加一种如何从arbitrary_class的字符串接收类常量的方法:

    "Article".constantize # Article