【问题标题】:How to join a table and count records in Rails 3?如何在 Rails 3 中加入表并计算记录?
【发布时间】:2011-10-23 15:50:53
【问题描述】:

我有一个Collection 班级,里面有很多硬币。 我正在尝试选择具有两个以上硬币的收藏。 目前,我通过直接的 Ruby 执行此操作没有问题,但效率极低。

我当前的代码:

collections = Collection.all.select { |c| c.coins.count > 2 }

我如何通过与 Arel 的 joins 通话来实现这一目标?

谢谢!

【问题讨论】:

  • 你不应该使用 Collection 作为类名...有几个 Ruby 内置结构需要集合(例如 rails 模型集合),并且可能会发生你覆盖一些导致意外行为的东西。 .
  • 感谢您的提示。任何想法如何创建“加入”?

标签: ruby ruby-on-rails-3 arel


【解决方案1】:

回答我自己的问题:

Collection.joins(:coins).group("coins.collection_id").having("count(coins.id) > 2")

KJF 提出问题的this similar questionkrakover 回答问题。

【讨论】:

    【解决方案2】:

    添加 counter_cache 列并查询它们。

    http://railscasts.com/episodes/23-counter-cache-column

    【讨论】:

    • 谢谢。计数器缓存旨在动态保存计数记录。鉴于我的收藏每个只包含 2-5 个硬币,这不是问题,我宁愿不在数据库中存储单独的列。任何想法如何使用 Rails 3 编写 joins 查询?
    猜你喜欢
    • 2023-03-14
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多