由于 Mongoid API 没有使 MongoDB $sample 操作可见,我不得不使用 Mongo 驱动程序手动运行查询,我不知道如何处理结果。
我有不同的类/集合,它们遵循一些通用接口(出于多种原因,我不想使用继承),并且我试图将它们呈现为单个集合。我有一个从这三个类中采样的代码
entries = [Class1, Class2, Class3].inject([]) do |array, clazz|
entries << clazz.collection.aggregate([ { '$sample': { size: 10 } } ])
end
这给了我三个不同的数组Mongo::Collection::View::Aggregation
。我想以某种方式合并这些并能够实例化对象,以便我可以在我的视图中使用它们(例如使用单元格)
<%= cell(:profile, collection: entries) %>
Usingentries.to_a
将返回一个哈希数组,而不是一个(模型)对象数组。我希望会是这样,然后我会使用单元格生成器来处理模型之间的其余细微差异
builds do |model, options|
case model
when Class1; Class1Cell
when Class2; Class2Cell
when Class3; Class3Cell
end
编辑 :
我实际上仍然可以使用to_a
和使用密钥_type
来找到相应的常量/模型。true
现在蝾螈的问题是如何用哈希实例化一个模型,它不会返回new_record?
sample = entries.to_a.first
instance = Utility.resolve_class(sample[:_type]).new(entry_hash)
# Problem is...
instance.new_record? # => returns true, but since it comes from the DB it means it has already been persisted so it should return false.