如何将 Rails 与大写列名一起使用?

How to use Rails with uppercase column name?

我有以下内容作为 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?

这不是 ActiveRecord 或 AREL 问题,这正是区分大小写在 SQL 和 PostgreSQL.

中的工作原理

SQL 中的标识符(例如 table 和列名)不区分大小写,除非它们被引用。标准 SQL 说不带引号的标识符被折叠成大写,PostgreSQL 将它们折叠成小写,因此错误消息中的 bar.maxusers

解决方案是引用有问题的列名:

.having('COUNT(foo.id) > bar."maxUsers"')

请注意,您必须使用双引号来引用标识符,因为单引号仅适用于字符串文字。另请注意,标识符引用是特定于数据库的:标准 SQL 和 PostgreSQL 使用双引号,MySQL 使用反引号,SQL 服务器使用方括号,...