我希望按类别的产品数量的下降顺序排列类别的slu((大多数产品类别的类别slug是第一个,没有产品的类别是最后一个)
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...
我该如何解决?
答案 0 :(得分:3)
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中添加的优化(延迟执行)有关。
答案 1 :(得分:0)
我在项目中遇到了类似的问题,我没有index.html
来重构查询,这对我的情况而言不是可行的选择。
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
。我个人不喜欢“魔术数字”,但是在这种情况下它很有用。