【问题标题】:Finding the average number of a has many association between two models using Rails ActiveRecord query interface使用 Rails ActiveRecord 查询接口查找 a 的平均数量在两个模型之间有很多关联
【发布时间】:2021-12-12 04:56:46
【问题描述】:

假设我有两个模型::User 和:Ringtone。 A :User 可以有多个 :Ringtones 并且一个 :Ringtone 属于一个用户。我希望能够使用 ActiveRecord 查询接口来计算属于:User 的平均铃声数量,但我正在努力弄清楚如何。

使用原始 sql 我可以得到如下数据:

  ActiveRecord::Base.connection.execute("
            (with tones_count as 
                (select 
                user_id, count(ringtones.id)
                from 
                ringtones
                group by 1)
            select avg(count) from tones_count)").values

但这并不理想,我更希望能够使用 ActiveRecord 进行此查询/计算...

【问题讨论】:

  • 这里的一切都很好。 ActiveRecord 查询接口不擅长做任何比最琐碎的数据库计算更多的事情,而且你想出的东西很可能会降低性能或降低可读性。

标签: sql ruby-on-rails postgresql activerecord


【解决方案1】:

I would much rather be able to use ActiveRecord,你可以这样做

    table = Arel::Table.new(:ringtones)
    Ringtone.from(
      Ringtone.select(
        table[:user_id], 
        table[:id].count.as("tones_count")
      ).group(1)
    ).average("tones_count")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多