我想按每个类别的产品数量的降序排列类别的子段(产品数量最多的类别的类别块是第一个,而没有产品的类别的末尾是最后一个)
I Rails 3.2查询
Category.
joins("LEFT OUTER JOIN products ON products.category_id = categories.id").
select('count("products"."id") as products_count').
group("categories.slug").
order("products_count desc").
select("categories.slug")
工作。但是,升级后,我得到一个
ActiveRecord::StatementInvalid: PG::UndefinedColumn
错误,说products_count列不存在
...and_id = categories.id GROUP BY categories.slug ORDER BY products_c...
我应该如何解决?
ORDER BY无法识别别名。
快速修复:
Category.
joins("LEFT OUTER JOIN products ON products.category_id = categories.id").
group("categories.slug").
order('count("products"."id") desc').
select("categories.slug")
为什么它在升级之前有效,但在升级之后却无效?我不确定,但是我想这与添加到ActiveRecord的优化(延迟执行)有关。
我在我的项目中遇到了类似的问题,而不是重构查询,而对于我的方案而言,这不是可行的选择,我使用了order(1)
。
Category.joins("LEFT OUTER JOIN products ON products.category_id = categories.id").
select('count("products"."id") AS products_count').
group("categories.slug").
order(1)
它允许我使用SELECT
,ALIAS
和GROUP
。