是否可以直接使用ActiveRecord组方法的结果

问题描述 投票:0回答:1

我有一个模型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

sql ruby-on-rails ruby postgresql activerecord
1个回答
1
投票

ActiveRecord#group创建一个SQL GROUP BY子句,它将始终返回单个项目列表而不是嵌套数据结构。因此答案是:不,你不能只用ActiveRecord创建这样的嵌套结构

您需要在groub_by(:events_count)返回的列表中运行类似ActiveRecord的内容,将列表转换为嵌套结构。

© www.soinside.com 2019 - 2024. All rights reserved.