如何查询activerecord的select_value方法?

A B*_*A B 3 postgresql ruby-on-rails ruby-on-rails-3

任何人都可以告诉我如何在select_value中编写查询.

我试过了,

    ActiveRecord::Base.connection.select_value("select count(*) from leave_details where status= 'Pending' and 'employeedetails_id'=25")
Run Code Online (Sandbox Code Playgroud)

但它显示错误

   invalid input syntax for integer: "employeedetails_id".
Run Code Online (Sandbox Code Playgroud)

我正在使用PostgreSQL.

mu *_*ort 6

单引号用于引用PostgreSQL中的字符串(以及甚至假装遵守SQL标准的所有其他SQL数据库),所以你说的是这样的:

some_string = some_integer
Run Code Online (Sandbox Code Playgroud)

当你这样做:

'employeedetails_id'=25
Run Code Online (Sandbox Code Playgroud)

这没有任何意义:没有明确的类型转换,你无法比较字符串和整数.您根本不需要引用该标识符:

ActiveRecord::Base.connection.select_value(%q{
    select count(*)
    from leave_details
    where status = 'Pending'
      and employeedetails_id = 25
})
Run Code Online (Sandbox Code Playgroud)

如果您甚至需要引用标识符(可能是区分大小写或包含空格),那么您将使用PostgreSQL的双引号.


显然,您创建了列"EmployeeDetails_id",使其区分大小写.这意味着你总是必须使用那个案例,你总是要加倍引用它:

ActiveRecord::Base.connection.select_value(%q{
    select count(*)
    from leave_details
    where status = 'Pending'
      and "EmployeeDetails_id" = 25
})
Run Code Online (Sandbox Code Playgroud)

我建议您重新编写表格以不使用​​大小写标识符:

  1. 他们反对标准的Ruby/Rails命名.
  2. 它们强制您在使用它们的地方双重引用混合大小写列名称.
  3. 他们反对标准的PostgreSQL实践.

这会让你一次又一次地绊倒你.