Mik*_*ike 11 ruby sql ruby-on-rails
我有一个博客.在我的索引页面上,我提取所有博客帖子.对于每篇博文,我都会计算该帖子的评论数量.这导致N + 1问题.我的查询如下:
SELECT "blog_posts".* FROM "blog_posts" WHERE ("blog_posts"."published" = 't') ORDER BY published_at DESC
SELECT "users".* FROM "users" WHERE ("users"."id" IN (1, 2, 3))
SELECT COUNT(*) FROM "blog_comments" WHERE ("blog_comments".blog_post_id = 10)
SELECT COUNT(*) FROM "blog_comments" WHERE ("blog_comments".blog_post_id = 9)
SELECT COUNT(*) FROM "blog_comments" WHERE ("blog_comments".blog_post_id = 8)
SELECT COUNT(*) FROM "blog_comments" WHERE ("blog_comments".blog_post_id = 2)
SELECT COUNT(*) FROM "blog_comments" WHERE ("blog_comments".blog_post_id = 7)
Run Code Online (Sandbox Code Playgroud)
Rails中是否有一种方法可以像我包含用户一样包含COUNT(SQL第2行)?
Hei*_*kki 21
您可以使用计数器缓存:http://guides.rubyonrails.org/association_basics.html#counter_cache
"通过此声明,Rails将使缓存值保持最新,然后返回该值以响应size方法."
class BlogPost < ActiveRecord::Base
has_many :blog_comments
end
class BlogComment < ActiveRecord::Base
belongs_to :blog_post, :counter_cache => true
end
Run Code Online (Sandbox Code Playgroud)
博客帖子会有一个名为的列blog_comments_count
.
归档时间: |
|
查看次数: |
2509 次 |
最近记录: |