Есть такая цепочка: Блог <-> Посты -> Комментарии.
Но сообщение может быть в двух или более блогах. То есть связь между блогом и публикацией является многим-многим.
Мне нужно выполнить поиск по комментариям и сгруппировать результаты по блогу.
Я пытаюсь сделать это путь:
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')
Я получу массив комментариев.
Подскажите, пожалуйста, как мне сгруппировать комментарии по блогам?