我想用实例方法扩展我所有的 's。Mongoid::Document
与其制作一个模块并将其包含在Mongoid::Document
我想要扩展的每个模块中,还应该有另一种方法。
例如,对于 ruby 类 Array,我只需重新打开该类并添加我想要的方法:
class Array
def my_new_method
#....
end
end
但是我该怎么做Mongoid::Document
呢?
我会这样做
module Mongoid::Document
def self.validate
...
end
end
然而,我会避免打开一个外部模块(即使你这看起来)是 ruby 社区中常见的事情。什么是反对明确地包含你自己的模块?
如果您要像使用 Array 一样打开一个类,最好这样做:
module MyNewMethodable
def my_new_method( *args )
fail ArgumentError, "not the right number of arguments"
#....
rescue => error
if MyNewMethodable::Error
puts "because then users of your module will know where to look for the fault"
else
raise error
end
end
class Error < StandardError; end
class ArgumentError < Error; end
end
class Array
include MyNewMethodable
end
为 Mongoid::Document 执行此操作
class Mongoid::Document
include MyNewMethodable
end
但是,这里说
文档是 Mongoid 中的核心对象,任何要持久化到数据库的对象都必须包含 Mongoid::Document。
所以它已经包含在您定义的类中。因此,我建议您将模块包含在您的课程中,而不是包含在Mongoid::Document
. 例如
class MyClass
include Mongoid::Document
include MyNewMethodable
end