任何人都可以告诉我如何在select_value中编写查询。
我试过了,
ActiveRecord::Base.connection.select_value("select count(*) from leave_details where status= 'Pending' and 'employeedetails_id'=25")
但显示错误
invalid input syntax for integer: "employeedetails_id".
我正在使用PostgreSQL。
答案 0 :(得分:6)
单引号用于引用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
})
我建议您重新处理表格以不使用大小写标识符:
这会让你一遍又一遍地绊倒你。
答案 1 :(得分:1)
直接执行SQL并不是真正的Rails方式,并且通过这样做会丢失任何数据库可移植性。
您应该为leave_details创建一个模型。 E.g。
rails g model LeaveDetails status:string employeedetails_id:integer
然后,代码将是:
LeaveDetails.where({ :status => 'Pending', :employeedetails_id => 25 }).count