0

DBにこのSQLクエリがあり、herokuのPostgreSQLで問題が発生しているため、herokuログに上記のエラーが表示されてページが読み込まれません。私はpostgreSQL9.1.6を使用しているので、以前のバグは明らかに修正されています

def self.top_countries
joins(:recipes).
  select('countries.*, count(*) AS recipes_count').
  group('countries.id').
  order('recipes_count DESC')

終わり

これが機能するようにリファクタリングする方法がわかりません。誰かアドバイスしてもらえますか?

ありがとうございました

4

1 に答える 1

1
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.idgroup by

于 2012-12-13T22:27:13.847 に答える