如何在 select 方法上定义的别名上使用 where 方法

How to use where method on an alias defined on a select method

各位。所以我在查询时遇到了问题。

我有这个代码:

obj = object.select("COALESCE(sum(stock.quantity), 0) as cnt")

它returns

obj.first.cnt
# 0

我想用

过滤计数
object.select("COALESCE(sum(stock.quantity), 0) as cnt").where(cnt: 0)

我无法正常工作。它returns一个

<#Object::ActiveRecord_AssociationRelation:0x3fe455b3ad5c>

这里的问题是 .where(cnt: 0) 会假定 cnt 是 table:

上的一个列
WHERE "objects"."cnt" = ?

A​​R 实际上并不知道 cnt 是别名。

您可以改为使用字符串文字来引用别名:

object.select("COALESCE(sum(stock.quantity), 0) as cnt")
      .where(Arel.sql("cnt = ?"), 0)