Ruby on rails Rails4按联接组中的列别名排序
我想按每个类别产品数量的降序排列类别的段塞(产品最多的类别段塞排在第一位,没有产品的类别段塞排在最后) I Rails 3.2查询Ruby on rails Rails4按联接组中的列别名排序,ruby-on-rails,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby On Rails 4,Activerecord,我想按每个类别产品数量的降序排列类别的段塞(产品最多的类别段塞排在第一位,没有产品的类别段塞排在最后) 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("produc
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
错误,表示列产品\u计数不存在
...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中的优化(延迟执行)有关。我在项目中遇到了类似的问题,我使用了
顺序(1)
,而不是重构查询,这对于我的场景来说不是一个可行的替代方案
它允许我使用
选择
、别名
和组
。我个人不喜欢“幻数”,但它在这种情况下很有用。如果没有普通的SQL,你怎么能进行这种查询?ActiveRecord仍然只支持“正常连接”。如何仅使用内置的AR方法进行此查询?我想在您的情况下创建SQL视图是最好的。有没有一种创建SQL视图的ActiveRecord方法?如果别名函数根本不需要,那么我就不能不删除整个。选择(
-line)并以Category.joins(“products.Category\u id=categories.id上的左外部连接产品”).group(“categories.slug”).order('count(“products”。.id”)desc')。选择(“categories.slug”)
(抱歉,注释中的格式不是最好的)?是的,我认为您可以安全地删除第一个select
。至于视图,您可以在迁移中使用纯SQL创建它们,然后像使用表一样使用它们。更多信息:查询实际上是相同的(更改自select count(“产品”。.id”)作为产品计数,categories.slug FROM“categories”左外部连接产品。brand\u id=categories.id按类别分组。slug ORDER BY products\u count desc
to选择类别。slug FROM“categories”左外部连接产品。brand\u id=categories.id按类别分组。slug ORDER BY count(“产品”。“id”)desc
并且结果也匹配。稍后我将查看Rails的SQL视图,并暂时接受您的答案
Category.
joins("LEFT OUTER JOIN products ON products.category_id = categories.id").
select('count("products"."id") as products_count').
group("categories.slug").
order(1)