获取用户评论以及在同一查询中分组的所有评论

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取用户评论以及在同一查询中分组的所有评论相关的知识,希望对你有一定的参考价值。

我目前正在使用Rails 5和Postgresql。有一个模型Post可以通过一个名为PostComments的模型获得很多评论,这样评论可以属于一个帖子,但该帖子可以有很多评论。我正在尝试获取所有评论,分组为属于特定用户的评论,以及所有其他评论。

class Post < ApplicationRecord
  has_many :post_comments
  has_many :comments, through: :post_comments
  ...

class Coment < ApplicationRecord
  has_many :post_comments
  has_many :posts, through: :post_comments
  ...

目前我正在做两个查询并进行比较,例如:

foo = Comment.select(:id, :description)
bar = Comment.joins(:post).select(:id, :description).where(posts: { id: post_id })
remaining_comments = [foo - bar, foo]

这给了我对特定商店和所有剩余商店的所有评论,但我想知道有更好的方法吗?

答案

您可以在一个查询中获取评论,如下所示:

@comments = Comment.left_outer_joins(:post)
                   .select("comments.id,comments.description,posts.id as post_id")
                   .where("posts.id = ? OR posts.id IS NULL",  post_id })

然后用group_by拆分:

remaining_comments = @comments.group_by(&:post_id)
另一答案

如果我正确地解释你,你是否正在努力有效地获得一系列不属于特定帖子的PostComments?

如果是这种情况,只需使用not方法:

x = # given Post id
post = Post.find(x).id
postcomments = PostComment.where.not(post_id: post)

以上是关于获取用户评论以及在同一查询中分组的所有评论的主要内容,如果未能解决你的问题,请参考以下文章

获取帖子列表的最新 3 条评论

单链查询 mongodb / mongoose 获取所有评论

从某个 subreddit 获取多个用户的所有评论 - Reddit Dataset

GitHub GraphQL 查询 - 按用户统计给定月份的 PR 评论

如何获取用户在 SQL 或 Ruby 中评论的页面上的最新评论?

parttion by ~~~针对某个字段或多个字段重复,数据只取前n条。问题例子:1.主评论下的评论按着 时间正序最多只取前5条 2.获取最新登录记录......