0

我有一个国家模型,想显示出现次数最多的国家,国家名称保存在“mame”列中,但是国家数据库是预先填充的,关系是一个国家

has_many recipes 

和食谱

 belongs_to country

到目前为止我有

Country.group('name').order('count_name DESC').limit(1).count('name')

但这行不通,因为表中每个国家/地区都有 1 个?我需要计算使用 country_id 的次数吗?如果是这样,那么语法是什么?可不可能是

Recipe.group('country_id').order('count_country_id DESC').limit(1).count('country_id')

或使用连接并选择

Country.joins(:recipes).select('countries.*, count(country_id) as "country_count"').group(:country_id).order(' country_count desc')

任何指针表示赞赏

4

1 回答 1

2

您可以通过使用查询来做到这一点。但是,RoR 已内置支持以实现相同的目标。它被称为计数器缓存。

我可以在这里解释,但我认为如果你关注这个截屏视频会更好。

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

这将使您很好地了解如何使用计数器缓存并获得您试图实现的目标。

于 2012-11-15T12:10:57.170 回答