def self.top_countries
joins(:recipes).
select('countries.id, count(*) AS recipes_count').
group('countries.id').
order('recipes_count DESC')
これによりSQLが生成されます
select countries.id, count(*) AS recipes_count
from countries
join recipes on countries.id = recipes.country_id
group by countries.id
order by recipes_count
SELECTには2つの列しかないことに気付くでしょう。
Herokuの専門家ではないので、国から必要なすべての列を明示的にリストし、完全な列リストでグループ化することで、Herokuを機能させることができると思います。
def self.top_countries
joins(:recipes).
select('countries.id, countries.name, countries.other, count(*) AS recipes_count').
group('countries.id, countries.name, countries.other').
order('recipes_count DESC')
元の回答(上部)を別の結合で結合して、の後に残りの列を取得する、より簡潔な方法があるかもしれtop_countries
ませcountries.id
んgroup by
。