作者:克阳光沫沫的幸福 | 来源:互联网 | 2022-12-06 18:45
我有以下作为AR查询的一部分:
.having('COUNT(foo.id) > bar.maxUsers')
这会产生错误:
ActiveRecord::StatementInvalid:
PG::UndefinedColumn: ERROR: column bar.maxusers does not exist
^
HINT: Perhaps you meant to reference the column "bar.maxUsers".
我正在引用该列bar.maxUsers
.
所以,显然AR降低了查询的范围.如何抑制这种行为?
Rails 4.2.10
PostgreSQL
编辑:SQL:
SELECT ... HAVING COUNT(foo.id) > bar.maxUsers
所以它发生在之后to_sql
.也许来自execute
?
1> mu is too sh..:
这不是ActiveRecord或AREL问题,这就是SQL和PostgreSQL中区分大小写的原因.
SQL中的标识符(例如表名和列名)不区分大小写,除非它们被引用.标准SQL表示不带引号的标识符被折叠为大写,PostgreSQL将它们折叠成小写,因此bar.maxusers
在错误消息中.
解决方案是引用违规列名称:
.having('COUNT(foo.id) > bar."maxUsers"')
请注意,必须使用双引号来引用标识符,因为单引号仅用于字符串文字.另请注意,标识符引用是特定于数据库的:标准SQL和PostgreSQL使用双引号,MySQL使用反引号,SQL Server使用括号,...