我读到了mongoid中的继承,似乎所有继承的类都将保存在基类中,例如。
class BaseClass
end
class ChildClass1 < BaseClass
end
class ChildClass2 < BaseClass
end
似乎所有这些都存储在BaseClass集合中。
我实际上希望它们存储在单独的集合中,例如ChildClass1 - collection
和ChildClass2 - collection
。
答案 0 :(得分:4)
我意识到这是一年前发布的,但这可能就是你想要的:
class BaseClass
include Mongoid::Document
def self.inherited(subclass)
super
subclass.store_in subclass.to_s.tableize
end
end
class ChildClass1 < BaseClass
end
class ChildClass2 < BaseClass
end
答案 1 :(得分:3)
这是不可能的。因为它是像explain by Durran the Mongoid creator
这样的STI In Mongoid的概念如果你真的想要保存在几个集合中,你需要使用模块包括:
class BaseClass
include MyModule
end
class ChildClass1
include MyModule
end
class ChildClass2
include MyModule
end
答案 2 :(得分:3)
请尝试这种方法:
module Base
extend ActiveSupport::Concern
include Mongoid::Document
include Mongoid::Timestamps
included do
# Common code goes here.
end
end
class ChildClass1
include Base
end
class ChildClass2
include Base
end
我在我的Rails 5应用程序中执行此操作,它确实有效。
答案 3 :(得分:3)
我遇到了同样的问题,但是在网上找不到一个好的解决方案。 经过几次尝试,我开发了一个解决方案:
class A
include Mongoid::Document
include Mongoid::Timestamps
...
end
class B < A
def self.collection_name
:your_collection_name_1
end
...
end
class C < A
def self.collection_name
:your_collection_name_2
end
...
end
在访问mongo集合之前,mongoid从'collection_name'方法获取集合名称。
这样,我覆盖了mongoid类的方法“ collection_name”,该方法返回了集合名称(而不是基类的名称带有“ s”的“ As”)
因此,所有来自B类的写(或读取)命令都将插入(选择)到“ your_collection_name_1”集合中,而C类将插入“ your_collection_name_2”集合中。