2011-01-04 24 views
4

開発中に問題なく動作するレールアプリがありますが、PostgreSQLを使用するHeroku経由で配備したときに多くのエラーが発生しています。Heroku PostgreSQL RailsアプリケーションでGROUP_BYエラーが発生しました

返されたばかりのエラーメッセージ:

 ActionView::Template::Error (PGError: ERROR: 
column "practices.id" must appear in the GROUP BY clause or be used in an aggregate function: 
SELECT "practices".* 
FROM "practices" WHERE ("practices".activity_id = 1) 
AND ("practices"."created_at" BETWEEN '2011-01-01' AND '2011-01-31') 
GROUP BY DATE(created_at) ORDER BY created_at DESC): 

私は次のように呼び出したときにスローされます。

def month_days_not_practiced(date = Date.today) 
    p = practices.where(:created_at => date.at_beginning_of_month..date.at_end_of_month).group("DATE(created_at)").to_a.count 
    days_in_month(date.year, date.month) - p 
end 

私は実際にそれが両方の開発に取り組んでいますので、クリーンなコードを維持したいと思いますプロダクションDBs ...誰も光を放つことができますか?

私はこれを試してみました:無駄に

def month_days_not_practiced(date = Date.today) 
    p = practices.where(:created_at => date.at_beginning_of_month..date.at_end_of_month).group("practices.id, DATE(created_at)").to_a.count 
    days_in_month(date.year, date.month) - p 
end 

...

TIAを。

答えて

4

あなたは、すべて選択リストの列でグループにそう

.group("practices.id, practices.foo, practices.bar, ..., DATE(created_at)") 

のみidによるグループへのあなたの考えは音が(idを仮定すると、主キーです)ですが、PostgreSQLは意志のみサポートを必要としますこれはバージョン9.1のものです。

+0

ああ歓声!それはそうです。 –

+0

私はこれで完全に混乱しました。私が選択したすべての列でグループ化しなければならない場合は、それらのいずれかでグループ化していないようですか? yを使用すると、エラーが取り除かれますが、今度は本質的に '.all'が残っています。私はここに何かを見逃していると確信していますが、それはこれまで私を暗示しています。 – wuliwong

5
Practice.group(Practice.col_list) 



def self.col_list 
    Practice.column_names.collect {|c| "practices.#{c}"}.join(",") 
end 
0
Practice.joins(:foobar).group_all 

def self.group_all 
    group(group_all_columns) 
end 

def self.group_all_columns 
    @group_all_columns ||= column_names.collect {|c| "#{table_name}.#{c}"}.join(",") 
end 
関連する問題