Rails4按联接组中的列别名排序

时间:2015-08-19 11:54:49

标签: ruby-on-rails ruby-on-rails-4 activerecord

我希望按类别的产品数量的下降顺序排列类别的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...

我该如何解决?

2 个答案:

答案 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) SELECTALIAS。我个人不喜欢“魔术数字”,但是在这种情况下它很有用。