在处理一个应用程序时,我收到此错误:
无法将Enumerator转换为数组
以下是我的代码,mr_collection
是MongoID查询。
mr_collection = self.where(query).map_reduce(map, reduce).finalize(finalize).out({:replace => 'mr_results'})
paginator = WillPaginate::Collection.new(page, limit, collection_count)
collection = mr_collection.find(
:sort => sort,
:limit => limit,
:skip => skip
)
paginator.replace(collection)
获取mr_collection
时,如果我检查结果mr_collection
,则会给我:
[
{"_id"=>1.0, "value"=>{"s"=>4.2, "p"=>14.95, "pml"=>0.01993}},
{"_id"=>2.0, "value"=>{"s"=>3.7, "p"=>12.9, "pml"=>0.0172}},
{"_id"=>3.0, "value"=>{"s"=>4.2, "p"=>12.9, "pml"=>0.0172}},
{"_id"=>4.0, "value"=>{"s"=>4.0, "p"=>11.95, "pml"=>0.01593}},
{"_id"=>300.0, "value"=>{"s"=>0.0, "p"=>8.95, "pml"=>0.01193}},
]
获取collection
时,如果我检查结果collection
,则会给我:
#<Enumerator: []:find({:sort=>[["value.s", :desc], ["value.pml", :asc]], :limit=>10, :skip=>0})>
我在第paginator.replace(collection)
行收到错误。我正在使用Ruby 1.9.3&amp; Rails 3.2.6。
答案 0 :(得分:4)
我不知道mongoid从未使用过它。 但搜索引发了一个非常相似的问题 - Mongoid 3 - access map_reduce results
不幸的是,我的环境不会测试
的魔力collection = mr_collection.send(:documents).sort(sort).limit(limit).skip(skip).to_a
你看过这个链接了吗?希望它能帮助您解决问题!
答案 1 :(得分:4)
collection
是Enumerator
,显然无法转换为Array
,这是replace
所期望的。
以下是rubydocs的评论:
可枚举#find(ifnone = nil){| e | ......}
将枚举中的每个条目传递给阻止。返回第一个块 不是假的。如果没有对象匹配,则调用ifnone并返回它 指定时的结果,否则返回nil。
如果没有给出阻止,则返回枚举器。
因此,您有两种选择:
希望这有帮助。
(故事的道德:总是阅读文档!)