28

pgプロダクションモードでこのエラーが発生していますが、sqlite3開発モードでは正常に機能しています。

 ActiveRecord::StatementInvalid in ManagementController#index

PG::Error: ERROR:  column "estates.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT "estates".* FROM "estates"  WHERE "estates"."Mgmt" = ...
               ^
: SELECT "estates".* FROM "estates"  WHERE "estates"."Mgmt" = 'Mazzey' GROUP BY user_id

@myestate = Estate.where(:Mgmt => current_user.Company).group(:user_id).all
4

4 に答える 4

16

最近、MySQL から PostgreSQL に移行したところ、同じ問題が発生しました。参考までに、私が見つけた最良のアプローチは、この SO 回答で提案されているように DISTINCT ON を使用することです。

Ruby on Rails / ActiveRecord によるエレガントな PostgreSQL グループ

これにより、他のクエリ条件に一致する、選択した列の一意の値ごとに 1 つのレコードを取得できます。

MyModel.where(:some_col => value).select("DISTINCT ON (unique_col) *") 

行の他のすべての列値を取得できるため、DISTINCT ON を好みます。DISTINCT だけでは、その特定の列の値のみが返されます。

于 2013-11-27T10:11:28.010 に答える