1

ActiveRecord にメソッドを追加する最初の Rails gem を作成しています。ActiveRecord に追加しているメソッド内から他のメソッドを呼び出す簡単な方法がわかりません。私が使用すべきパターンはありますか?

module MyModule

  def self.included(base)
    base.extend(ClassMethods)
  end

  module ClassMethods

    def my_class_method
      # This doesn't work
      some_utility_method
    end

  end

  def some_utility_method
    # Do something useful
  end

end

ActiveRecord::Base.send(:include, MyModule)
4

1 に答える 1

3

を含めるとMyModuleActiveRecord::Baseクラスメソッド (オブジェクトのインスタンス メソッドと同等)として、およびインスタンスメソッドとして保持されます。my_class_methodClassActiveRecord::Basesome_utility_method

したがって、内部my_class_methodClassselfであり、そのクラスのインスタンスではありません。利用可能なメソッドとしてはありません ActiveRecord::Basesome_utility_method

編集: モジュールに対してプライベートなユーティリティ メソッドが必要な場合は、次のようにします。

module MyModule

  def self.included(base)
    base.extend(ClassMethods)
  end

  module ClassMethods

    def my_class_method
      # This doesn't work
      MyModule::some_utility_method
    end

  end

  def self.some_utility_method
    # Do something useful
  end

end

ActiveRecord::Base.send(:include, MyModule)
于 2012-04-18T19:30:19.077 に答える