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

时间:2018-05-03 02:04:05

标签: ruby-on-rails postgresql ruby-on-rails-5

我目前正在使用Rails 5和Postgresql。通过名为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]

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

2 个答案:

答案 0 :(得分:2)

您可以在以下一个查询中获取评论:

@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)

答案 1 :(得分:1)

如果我正确地解释您,您是否正在尝试有效地获取一系列不属于特定帖子的PostComments?

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

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