如何在 Rails 3 中加入表并计算记录?

Posted

技术标签:

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

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

我当前的代码:

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

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

谢谢!

【问题讨论】:

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

回答我自己的问题:

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

向KJF 提出问题的this similar question 和krakover 回答问题。

【讨论】:

【参考方案2】:

添加 counter_cache 列并查询它们。

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

【讨论】:

谢谢。计数器缓存旨在动态保存计数记录。鉴于我的收藏每个只包含 2-5 个硬币,这不是问题,我宁愿不在数据库中存储单独的列。任何想法如何使用 Rails 3 编写 joins 查询?

以上是关于如何在 Rails 3 中加入表并计算记录?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Rails 应用程序中克隆表并保持结构同步?

如何在 r2dbc 中加入表?

如何在 Datatables 中加载表并让它在加载时自动滚动到最后一条记录

在数据库架构中加入表?

在 MySQL 中加入表的转置

在 TypeORM 和 NodeJS 中加入表