rails 4和mongoid减少了查询次数

时间:2013-10-01 07:56:51

标签: ruby-on-rails ruby mongodb mongoid eager-loading

我有一个Category模型has_many :items。这些项目有一个删除的布尔字段,用于检查项目是否已被删除。列出所有类别时,我还要打印该类别中deleted: false项的计数

这就是我这样做的方式

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

打印出未删除项目的计数时,我正在

category.items.get_all.count

get_all是项目模型中的范围

scope :get_all, where(deleted: false)

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

1 个答案:

答案 0 :(得分:0)

由于范围N+1get_all items的{​​{1}}执行查询,您收到了category次查询。

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

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

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