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 に答える