我有一个模型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>], ... }
我可以使用普通红宝石group_by
来实现这样的结果,但考虑到我有几百万个事件这似乎不是最好的解决方案。是否有可能以某种方式使用ActiveRecord或纯SQL来实现结果?
附:我使用PostgreSQL
ActiveRecord#group
创建一个SQL GROUP BY
子句,它将始终返回单个项目列表而不是嵌套数据结构。因此答案是:不,你不能只用ActiveRecord
创建这样的嵌套结构
您需要在groub_by(:events_count)
返回的列表中运行类似ActiveRecord
的内容,将列表转换为嵌套结构。