можно ли работать с результатами группового метода ActiveRecord напрямую - PullRequest
0 голосов
/ 29 марта 2019

У меня есть модель Event, у нее есть атрибут ticket_id. Я группирую свои events по этому атрибуту так:

Event.group(:ticket_id).having('count(events.ticket_id) > 1')

и это отлично работающий запрос, но я не понимаю, как работать с результатом такого запроса напрямую.

Я понимаю, что, например, я могу вызвать метод count для него и получить хэш с ticket_ids и количеством соответствующих событий. Но мне нужно получить структуру с ticket_ids в качестве ключей и массивами событий в качестве значений, подобных этому:

{ 1 => [#<Event:1>, #<Event:2>], 2 => [#<Event:3>, #<Event:4>], ... }

Я могу добиться такого результата, используя обычный ruby ​​group_by, но, учитывая тот факт, что у меня несколько миллионов событий, это кажется не лучшим решением. Можно ли как-то добиться результата, используя ActiveRecord или, возможно, простой SQL?

P.S. Я использую PostgreSQL

1 Ответ

1 голос
/ 29 марта 2019

ActiveRecord#group создает предложение SQL GROUP BY, которое всегда будет возвращать один список элементов, а не вложенную структуру данных. Поэтому ответ таков: нет, вы не можете создать такую ​​вложенную структуру только с помощью ActiveRecord

Вам потребуется выполнить что-то вроде groub_by(:events_count) в списке, возвращенном из ActiveRecord, чтобы перевести список во вложенную структуру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...