2013-10-01 62 views
0

我有一个Category模型has_many :items。这些项目具有删除的布尔字段,用于检查项目是否已被删除。当列出所有类别,我也想打印的deleted: false项目总数的该类别rails 4和mongoid减少查询次数

这是我正在做

@categories = Category.includes(:items).all 

当打印不删除的项目数,我]丢

category.items.get_all.count 

get_all为项模型内的范围

scope :get_all, where(deleted: false) 

它完成了工作,但我觉得网页加载时间比我网站上的其他页面慢。有什么办法可以优化这段代码吗?

回答

0

由于范围为get_all,您将收到N+1查询,该查询执行每个categoryitems查询。

缓慢加载时间问题的实际解决方案取决于哪个查询使其变慢。如果需要帮助,请参阅服务器查询日志以确定并发布它们。

N+1查询问题可以通过获取计数Ruby本身来解决这样的:

category.items.select{|i| !i.deleted}.count