为什么define_method在这个例子中没有创建新的类方法?

时间:2012-07-17 13:47:23

标签: ruby metaprogramming

我有这段代码:

module Helper
  def translates(*attributes)
    attributes.each do |attribute|
      define_method("find_by_#{attribute}") do |value|
        value
      end  
    end  
  end  
end  

class SomeClass
  extend Helper
  translates :foo
end

现在,在我看来,方法SomeClass.find_by_foo应该存在。但事实并非如此。你知道我做错了吗?

2 个答案:

答案 0 :(得分:2)

您会发现SomeClass.new.respond_to?(:find_by_foo)返回true。如果要将方法添加到类侧,请使用define_singleton_method

答案 1 :(得分:1)

使用Eigenclass

您可以使用特征类将方法定义为类方法。例如:

module Helper
  def translates(*attributes)
    attributes.each do |attribute|
      define_singleton_method("find_by_#{attribute}") do |value|
        value
      end
    end
  end
end