【发布时间】:2014-11-09 18:47:39
【问题描述】:
使用这些模型:
models/asset.rb
class Asset < Entity
include Mongoid::Document
end
模型/资产/text.rb
module Assets
class Text < Asset
include Mongoid::Document
store_in collection: "#{tenant_uuid}_contents"
end
end
Rails 控制台返回:
Entity.all.entries
MOPED: 127.0.0.1:27017 QUERY database=dbname collection=entities selector={} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.3572ms) []
资产.所有条目
MOPED:127.0.0.1:27017 QUERY database=dbname collection=2b66d7a9-8cb5-4802-838a-f1f58869bbf5_contents selector={"$query"=>{"_type"=>{"$ in"=>["Asset"]}}, "$orderby"=>{"_id"=>1}} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.9501ms) []
但如果我再次执行 Entity.all.entries(即在 Asset.all.entries 之后),我会得到不同的响应:
Entity.all.entries
MOPED: 127.0.0.1:27017 QUERY database=dbname collection=2b66d7a9-8cb5-4802-838a-f1f58869bbf5_contents selector={} flags=[:slave_ok] limit=0 skip=0 batch_size=零字段=零(3.2308ms)
MOPED: 127.0.0.1:27017 GET_MORE .... 所有文件都在这里返回
如果我删除 Asset 继承自 Entity 的事实,那么
Assets.all.entries
总是第一次工作并返回所有文档。
所以我对这里的继承链有些不理解。或者实体没有存储在内容集合中的事实 - 它就像一个“抽象”类(实体类被存储在各自集合中的其他对象继承)。
那么这里的问题是Mongoid不能支持这样的继承结构吗?我们是否必须将 Entity 与其子项存储在同一个集合中?
提前致谢。
【问题讨论】:
-
请提供实体的模型定义。
-
@GaryMurakami 抱歉,但我现在有了答案,同一个问题的链接比我描述的更好:)
标签: ruby-on-rails inheritance mongoid