Ruby on rails RoR生成的sql在哪里

Ruby on rails RoR生成的sql在哪里,ruby-on-rails,Ruby On Rails,我有三张表:StatusCode、worequest和employee。工作属于员工,员工有很多工作。Worequest属于statuscode,statuscode有许多Worequest 我也有worequest的范围: scope :notcompl, where(:statuscode_id != Statuscode.last, true) 我正在尝试显示未完成的员工工作要求: <% @employee.worequests.notcompl.each do |wor

我有三张表:StatusCode、worequest和employee。工作属于员工,员工有很多工作。Worequest属于statuscode,statuscode有许多Worequest

我也有worequest的范围:

   scope :notcompl, where(:statuscode_id != Statuscode.last, true) 
我正在尝试显示未完成的员工工作要求:

 <% @employee.worequests.notcompl.each do |worequest| %>

我得到的错误是: 错误:错误:和的参数必须是boolean类型,而不是integer类型 第1行:…uests“其中”worequests“。employee_id”=2和(1)订单B

我试图查看员工编号2。我不明白为什么它将“and(1)”放在SQL中

有什么想法吗


谢谢!

您是否错过了指定
compelled
status
?)列名?如果是,您应该重写您的范围:

scope :notcompl, where("statuscode_id != #{Statuscode.last.id}").where(completed: true) 
你的范围

   scope :notcompl, where(:statuscode_id != Statuscode.last, true) 
与某些ruby ORM不同,activerecord不会覆盖符号上的方法,因此最终只会出现where

where(true,true)
(因为很明显,该符号永远不等于整数)和true将被类型转换为整数1。如果要查找某个值不等于其他值的行,则需要执行以下操作

where("status_code_id != ?", StatusCode.last.id)

还请注意,这将使用加载此作用域的文件时的最后一个状态代码-如果您的应用程序在运行时创建状态代码,您将希望将作用域包装在lambda中

否,最后一个状态代码已完成。已完成不是另一列。可能应该是-必须考虑一下。PS-scop当我只是列出已完成或未完成的worequests时,e工作正常。生成的SQL是-:从“worequests”中选择“worequests”。“employee_id”=2和(1)ORDER BY id DESC。我不明白为什么会将AND(1)抛出其中。我将其更改为:scope:notcompl,WHERE(“statuscode_id!=?”,statuscode.last.id)成功了,谢谢