【问题标题】:is it possible to work with the results of ActiveRecord group method directly是否可以直接使用 ActiveRecord 组方法的结果
【发布时间】:2019-03-29 14:09:31
【问题描述】:

我有一个模型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 以某种方式实现结果?

附:我用的是 PostgreSQL

【问题讨论】:

  • 考虑到您有数百万个事件,在我看来,您不太可能希望通过某个属性在一个页面组上呈现所有事件。您真正想在该页面上显示什么?
  • 我不会渲染它们。我只是想知道是否可以使用 ActiveRecord 或普通 SQL 或两者都获得这样的结构。

标签: sql ruby-on-rails ruby postgresql activerecord


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    相关资源
    最近更新 更多