и колонка agent_id.
На выводе если есть дубли по agent_id, то сгруппируется и выводится как одна строка, а внутри этой строки инфо что там 2 или более раз встречается этот агент.
Но суть в чем?
В том что если надо делать пагинацию page(1).per(20) и вывести надо 20 штук, то в выводе может оказаться 5 штук например из-за сгруппирования.
Как можно сделать запрос в БД так, чтобы вывести больше 20 записей, чтобы в итоге вышло 20 записей на отображении?
Выглядит как обычный group by. Если на последней странице оно тоже схлопнется то проблемы не вижу. Пагинацию тоже по group by считать
>Как можно сделать запрос в БД так, чтобы вывести больше 20 записей, чтобы в итоге вышло 20 записей на отображении? Надо не выводить больше записей в надежде что те 100 агентов у одного юзера перекроются, а пагинировать по сгруппированным результатам.
Как ты это себе представляешь? Можешь примерный запрос написать? Просто не однозначно, так как group_by это метод руби
В зависимости от контекста, если мы про Array.group_by то это рубильный метод из стандартной библиотеки, но ActiveRecord.group_by не из стандартной библиотеки
Извиняюсь, перепутал с чемто другим, у актив рекорда есть метод .group который группирует по ключам
то есть ты хочешь для 20 различных agent_id вывести по 20 users с этим agent_id? ну что-то типа такого ( не уверен что работает, мог где-то ошибиться ) class Agent < AR has_many :users has_many :latest_users, -> { order(created_at: :desc).limit(20) }, class_name: 'User' end Agent.limit(20).includes(:latest_users).each do |agent| agent.latest_users # 20 юзеров для каждого agent end
а зачем лимит давжды?
Один для agents, другой для users
Суть не в этом, а в дублях
Тогда не понял что надо надо сделать)
GROUP BY это конструкция sql. group рельсовый это конструкция active record которая поверх него делает абстракцию.
Я все еще не понимаю в чем проблема если на последней странице у тебя меньше элементов из-за группировки. На всех остальных страницах всегда полный набор будет.
Почему не понимаешь в чем суть? Ну ты из БД запрашиваешь на первой странице 20 штук, а после обработки там может быть 15 штук, а в действительности надо вывести постранично столько, чтобы вышло 20 штук после обработки.
Это ты не понимаешь как GROUP BY с пагинацией работает. Тебе уже прилетает из базы ровно 20 штук на страницу уже схлопанных результатов, и количество страниц ты тоже через группировку считаешь
Просто в group by если не указать все поля, что в select, появляется ошибка
Потому что надо с group by и агрегауиямт в sql практиковаться и понимать как оно работает
Обсуждают сегодня