2011-08-09 48 views
14

我有一个Collection类有很多硬币。 我想选择有两个以上硬币的集合。 目前,我没有问题通过直接Ruby来做到这一点,但这是非常低效的。如何在Rails 3中加入表格和计数记录?

我当前的代码:

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

如何做到这一点通过joins呼叫与阿雷尔?

谢谢!

+0

你不应该使用收集的类名......有几个红宝石建在需要集合结构(例如轨道模型集合),它可能发生,你忽略一些事情,导致意外的行为.. – Lichtamberg

+2

感谢小费。任何想法如何创建'加入'? –

回答

23

要回答我的问题:

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

帽尖到KJF谁问this similar questionkrakover回答它。

1

添加counter_cache列并查询它们。

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

+1

谢谢。计数器缓存意味着在运行中保存计数记录。鉴于我的藏品只包含2-5个硬币,这不是问题,我宁愿不在数据库中存储单独的列。任何想法如何使用Rails 3编写'连接'查询? –