访问Ruby模块中的其他方法

时间:2012-04-18 19:20:33

标签: ruby-on-rails ruby

我正在编写我的第一个Rails gem,它为ActiveRecord添加了一个方法。我似乎无法找到一种简单的方法从我添加到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)

1 个答案:

答案 0 :(得分:3)

包含MyModule后,ActiveRecord::Basemy_class_method作为方法(等效地,{{1}的实例方法对象Class)和ActiveRecord::Base作为实例方法。

因此,在some_utility_method内,my_class_method Class self,而不是该类的实例;它没有ActiveRecord::Base作为可用方法

修改 如果你想要一个私有的模块实用程序方法,你可以这样做:

some_utility_method