MySQL でうまく動作する ActiveRecord クエリ (history here ) を使用していますが、データベースを PostgreSQL に変換する必要があり、エラーが発生します。クエリは次のとおりです。
class Shoe < ActiveRecord::Base
has_many :purchases
def self.available_shoes
#show all shoes that have been purchased less than num_in_stock
num_in_stock = 3
Shoe.includes(:purchases)
.group("purchases.shoe_id")
.having("COUNT(purchases.shoe_id) < ?", num_in_stock)
end
end
gem とアダプターを postgres に切り替えるだけでは不十分です。次のエラーが表示されます。
ActionView::Template::Error (PG::Error: ERROR: column "shoes.id" must appear in the GROUP BY clause or be used in agregate function LINE 1: SELECT "shoes"."id" AS t0_r0, " shoes"."created_at" AS ...
変えてみた
.group("purchases.shoe_id")
に
.group("purchases.shoe_id, shoes.id, purchases.id")
これによりエラーが解消されましたが、SQLも変更され、テストの一部が壊れました。
このエラーに関する多くのスタックオーバーフローの質問を読みましたが、解決策を見つけることができませんでした. これをpostgresで機能させるには、ActiveRecordクエリで何を変更する必要がありますか?
前もって感謝します!