我正在编写我的第一个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)
答案 0 :(得分:3)
包含MyModule
后,ActiveRecord::Base
将my_class_method
作为类方法(等效地,{{1}的实例方法对象Class
)和ActiveRecord::Base
作为实例方法。
因此,在some_utility_method
内,my_class_method
是 Class self
,而不是该类的实例;它没有ActiveRecord::Base
作为可用方法
修改强> 如果你想要一个私有的模块实用程序方法,你可以这样做:
some_utility_method