单引号用于引用 PostgreSQL 中的字符串(以及甚至假装尊重 SQL 标准的所有其他 SQL 数据库),所以你说的是这样的:
some_string = some_integer
当你这样做时:
'employeedetails_id'=25
这没有任何意义:如果没有明确的类型转换,您将无法比较字符串和整数。您根本不需要引用该标识符:
ActiveRecord::Base.connection.select_value(%q{
select count(*)
from leave_details
where status = 'Pending'
and employeedetails_id = 25
})
如果您甚至确实需要引用标识符(可能区分大小写或包含空格),那么您将在 PostgreSQL 中使用双引号。
显然,您创建的列"EmployeeDetails_id"
是区分大小写的。这意味着您总是必须使用这种情况,并且总是必须双引号:
ActiveRecord::Base.connection.select_value(%q{
select count(*)
from leave_details
where status = 'Pending'
and "EmployeeDetails_id" = 25
})
我建议您修改您的表格以不使用混合大小写标识符:
- 它们违背了标准的 Ruby/Rails 命名。
- 它们迫使您在使用它们的任何地方都使用混合大小写的列名双引号。
- 他们违背了标准的 PostgreSQL 实践。
这会让你一次又一次地绊倒。