SQLite (開発) および MySQL (本番) から Postgres への移植を含め、自分の VPS から Heroku に移行しようとしている Ruby on Rails 2.3.x アプリケーションがあります。
これは、私が使用している典型的な Rails 呼び出しです。
spots = Spot.paginate(:all, :include => [:thing, :user, :store, {:thing => :tags}, {:thing => :brand}], :group => :thing_id, :order => order, :conditions => conditions, :page => page, :per_page => per_page)
質問 1:のようなエラーがたくさん発生しPG::Error: ERROR: column "spots.id" must appear in the GROUP BY clause or be used in an aggregate function
ます。ここでは、SQLite/MySQL の方が明らかに寛容でした。もちろん、指定したフィールドを:group
パラメーターに追加することでこれらを簡単に修正できますが、コードを台無しにしているように感じます。より良い方法はありますか?
質問 2: Postgres にないすべての GROUP BY 列を投入すると、次のステートメントになります (:group
変更されているだけです)。
spots = Spot.paginate(:all, :include => [:thing, :user, :store, {:thing => :tags}, {:thing => :brand}], :group => 'thing_id,things.id,users.id,spots.id', :order => order, :conditions => conditions, :page => page, :per_page => per_page)
これにより、次の SQL コードが生成されます。
SELECT * FROM (SELECT DISTINCT ON ("spots".id) "spots".id, spots.created_at AS alias_0 FROM "spots"
LEFT OUTER JOIN "things" ON "things".id = "spots".thing_id
WHERE (spots.recommended_to_user_id = 1 OR spots.user_id IN (1) OR things.is_featured = 't')
GROUP BY thing_id,things.id,users.id,spots.id) AS id_list
ORDER BY id_list.alias_0 DESC LIMIT 16 OFFSET 0;
...エラーが発生しますPG::Error: ERROR: missing FROM-clause entry for table "users"
。どうすればこれを解決できますか?