Rails4通过联接组中的列别名进行排序

问题描述 投票:3回答:2

我想按每个类别的产品数量的降序排列类别的子段(产品数量最多的类别的类别块是第一个,而没有产品的类别的末尾是最后一个)

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...

我应该如何解决?

ruby-on-rails ruby-on-rails-4 activerecord
2个回答
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的优化(延迟执行)有关。


0
投票

我在我的项目中遇到了类似的问题,而不是重构查询,而对于我的方案而言,这不是可行的选择,我使用了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)

它允许我使用SELECTALIASGROUP

© www.soinside.com 2019 - 2024. All rights reserved.