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

固有クラスを使用する

固有クラスを使用して、メソッドをクラス メソッドとして定義できます。例えば:

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 に答える