可能是一个令人困惑的标题,但不知道该怎么说。示例应该更清楚。我有许多不同的模型,它们具有许多相同的属性。因此,在每个模型中,我必须指定那些相同的属性,然后指定特定于该特定模型的属性。
有什么方法可以创建一些列出这些基本属性的类,然后从该类继承而不使用单表继承?因为如果我将所有共享属性和 Mongoid 包含到单个模型中并从其他模型中的该基本模型继承,那么 STI 将被强制执行,并且我的所有模型都存储在单个 mongodb 集合中,由“_type”字段区分。
这就是我所拥有的:
class Model_1
include Mongoid::Document
field :uuid, :type => String
field :process_date, :type => String
...
end
class Model_2
include Mongoid::Document
field :uuid, :type => String
field :process_date, :type => String
...
end
但这是我追求的功能:
class Base_model
field :uuid, :type => String
field :process_date, :type => String
end
class Model_1 < Base_model
# To ensure STI is not enforced
include Mongoid::Document
# Attribute list inherited from Base_model
end
问题是,如果 Base_model 中没有“include Mongoid::Document”,则该基本模型不知道“field ...”功能。但是,如果您确实将 mongoid 包含在基本模型中并从它继承,则会强制执行 STI。
我不能针对这种特殊情况进行 STI,但是拥有多个模型是一场编码噩梦,所有模型都一遍又一遍地指定相同的属性列表(模型数量越来越多,每个共享大约 15-20 个属性,所以任何时候我必须更改模型名称,到处更改它需要付出很多努力......)。