我有一个我一直在使用的 ActiveRecord 查询(这里的历史),它在 MySQL 中运行良好,但现在我需要将我的数据库转换为 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
简单地将 gems 和适配器切换到 postgres 是不够的:我现在收到以下错误:
ActionView::Template::Error (PG::Error: ERROR: column "shoes.id" 必须出现在 GROUP BY 子句中或用于聚合函数 LINE 1: SELECT "shoes"."id" AS t0_r0, "鞋”。“created_at”AS ...
我试着改变
.group("purchases.shoe_id")
至
.group("purchases.shoe_id, shoes.id, purchases.id")
虽然这消除了错误,但它也改变了 sql 并破坏了我的一些测试。
我已经阅读了许多有关此错误的 stackoverflow 问题,但我无法找到解决方案。我需要在我的 ActiveRecord 查询中进行哪些更改才能使其在 postgres 中工作?
提前致谢!