我想用实例方法扩展所有我的Mongoid::Document
。我应该采用另一种方式,而不是制作模块并将其包含在我想要扩展的每个Mongoid::Document
中。
例如,对于ruby类Array,我只需重新打开这个类并添加我想要的方法:
class Array
def my_new_method
#....
end
end
但我如何才能Mongoid::Document
?
答案 0 :(得分:2)
我会这样做
module Mongoid::Document
def self.validate
...
end
end
但是,我不会打开外部模块(即使你看起来这样)在ruby社区中常常做的事情。有什么可以反对明确包含你自己的模块?
答案 1 :(得分:1)
如果您打算像使用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
但是,它说here
文档是Mongoid中的核心对象,任何要保存到数据库的对象都必须包含Mongoid :: Document。
所以它已经包含在您定义的类中。因此,我建议您将模块包含在课程中,而不是Mongoid::Document
。 e.g。
class MyClass
include Mongoid::Document
include MyNewMethodable
end