0

我有这个代码:

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应该存在。但事实并非如此。你知道我做错了什么吗?

4

2 回答 2

2

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

于 2012-07-17T13:54:34.767 回答
1

使用特征类

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

module Helper
  def translates(*attributes)
    attributes.each do |attribute|
      define_singleton_method("find_by_#{attribute}") do |value|
        value
      end
    end
  end
end
于 2012-07-17T13:57:12.197 回答