我目前正在使用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]
这给了我对特定商店和所有剩余商店的所有评论,但我想知道有更好的方法吗?
答案 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)