我正在编写我的第一个 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)
最佳答案
一旦您包含了 MyModule
,ActiveRecord::Base
将拥有 my_class_method
作为类方法(等效地,Class
对象 ActiveRecord::Base
) 的实例方法,以及 some_utility_method
作为实例 方法。
因此,在 my_class_method
中,self
是 Class ActiveRecord::Base
,而不是它的一个实例类(class);它没有 some_utility_method
作为可用方法
编辑: 如果你想要一个模块私有(private)的实用方法,你可以这样做:
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)
关于ruby-on-rails - 访问 Ruby 模块中的其他方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10216418/