Получить комментарии пользователей и все комментарии, сгруппированные в одном запросе - PullRequest
0 голосов
/ 03 мая 2018

В настоящее время я работаю с 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]

Это дает мне все комментарии для конкретного магазина и все остальные, но мне было интересно, есть ли лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Вы можете получить комментарии в одном запросе, как показано ниже:

@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)
0 голосов
/ 03 мая 2018

Если я правильно вас интерпретирую, вы пытаетесь эффективно получить массив PostComments, которые не принадлежат конкретной публикации?

Если это так, просто используйте метод not:

x = # given Post id
post = Post.find(x).id
postcomments = PostComment.where.not(post_id: post)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...