首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >点点评论者数目

点点评论者数目
EN

Stack Overflow用户
提问于 2015-02-05 19:13:57
回答 5查看 294关注 0票数 0

有文章和评论。

代码语言:javascript
运行
复制
class Comment < ActiveRecord::Base
  belongs_to :user
  belongs_to :article, counter_cache: true
end

您可以通过这样的操作来计算注释的数量:@article.comments_count

问题是--你如何计算在一篇特定@文章上留下评论的唯一用户的数量?(注意:唯一的用户可以留下多个注释)

下面是一个场景:

  1. 评论- user_id(1)
  2. 评论- user_id(4)
  3. 评论- user_id(1)

注释计数=3

评论人(留下评论的唯一用户) count =2

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-02-05 23:04:02

Rails有一个很好的 query method,它使这个特定的查询更容易生成:

代码语言:javascript
运行
复制
Comment.where(article_id: article.id).select(:user_id).distinct.count

它生成以下SQL:

代码语言:javascript
运行
复制
SELECT DISTINCT COUNT(DISTINCT "comments"."user_id") FROM "comments" WHERE "comments"."article_id" = ?

这种方法的好处是允许数据库完成繁重的工作。数据库通常比在Ruby中直接操作对象快几个数量级。

如果您愿意按以下方式修改您的Article类:

代码语言:javascript
运行
复制
class Article < ActiveRecord::Base
  has_many :comments
  has_many :commenters, through: :comments, source: :user
  has_many :unique_commenters, -> { distinct }, through: :comments, source: :user
end

还可以使用以下代码生成查询:

代码语言:javascript
运行
复制
article.unique_commenters

它生成以下SQL:

代码语言:javascript
运行
复制
SELECT DISTINCT "users".* FROM "users" INNER JOIN "comments" ON "users"."id" = "comments"."user_id" WHERE "comments"."article_id" = ?
票数 3
EN

Stack Overflow用户

发布于 2015-02-05 19:20:40

尝试使用pluckuniq

@article.comments.uniq.pluck(:user_id)

或者仅仅是pluck

@article.comments.pluck("DISTINCT user_id")

票数 1
EN

Stack Overflow用户

发布于 2015-02-05 19:20:42

代码语言:javascript
运行
复制
article.comments.collect(&:user).uniq{|user| user.id}.count
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28352136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档