Как сделать группировку через несколько ассоциаций? - PullRequest
1 голос
/ 21 марта 2020

Есть такая цепочка: Блог <-> Посты -> Комментарии.

Но сообщение может быть в двух или более блогах. То есть связь между блогом и публикацией является многим-многим.

Мне нужно выполнить поиск по комментариям и сгруппировать результаты по блогу.

Я пытаюсь сделать это путь:

Comment.search_by_query(search_params[:query])
       .joins(post: :blogs)
       .group('blogs.title')
       .limit(20)

Я получаю ошибку и исправляю ее так:

Comment.search_by_query(search_params[:query])
       .joins(post: :blogs)
       .group('comments.id, blogs.title')
       .limit(20)

И после этого я получаю новую ошибку (но похожую на предыдущую):

> ERROR:  column "pg_search_9780daa5e89d610e876399.rank" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: ..."blog_id" GROUP BY comments.id, blogs.title ORDER BY pg_search_...

Это камень pg_search . Метод search_by_query был создан с использованием pg_search_scope:

pg_search_scope :search_by_query, against: %i[title]

Если я добавлю столбец rank, ошибок больше не будет, но и группировки не будет:

group('comments.id, blogs.title, rank')

Я получу массив комментариев.

Подскажите, пожалуйста, как мне сгруппировать комментарии по блогам?

...