我试图弄清楚为什么这会产生N + 1查询。具体来说,我想得到upvotes的数量,并认为通过使用连接它会。我的目标是通过upvotes计数来排序结果,但是当我还想报告每个条目的upvotes计数时,为什么它再次查询数据库的upvotes?谢谢:))
self
.joins(:upvotes)
.group("#{self.table_name}.id")
.order("count(upvotes.id) DESC")
.includes(:creator, :categories)
答案 0 :(得分:0)
如果这是一个常见的计数,Rails有一个称为计数器缓存的东西,它会将计数存储在父模型中,以便于查询。
我不知道你的班级姓名,所以我打电话给X。
Upvote
:belongs_to :x, counter_cache: true
然后,您只需要upvotes_count
X
个字段
存储在X上,您只需查询X,按_upvotes_count_排序并使用该字段显示它。