RoR生成的sql有哪些

时间:2012-05-15 17:03:52

标签: ruby-on-rails

我有3个表stauscode,worequest和employee。 Worequest属于员工和员工has_many worequests。 Worequest属于statuscode,而statuscode有很多worequest。

我也有worequest的范围:

   scope :notcompl, where(:statuscode_id != Statuscode.last, true) 

我正在尝试显示未完成的员工的问题:

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

我得到的错误: G ::错误:错误:AND的参数必须是boolean类型,而不是类型integer 第1行:......让“WHERE”worequests“。”employee_id“= 2 AND(1)ORDER B ...

我正在尝试查看员工编号2.我无法弄清楚为什么将“和(1)”放入SQL中。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

您是否错过了指定compeltedstatus?)列名称?如果是这样,您应该重写范围:

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

答案 1 :(得分:0)

你的范围

   scope :notcompl, where(:statuscode_id != Statuscode.last, true) 

坏了。与某些ruby orms不同,activerecord不会覆盖符号上的方法,因此最终只会出现

where(true,true)

(因为很明显,符号永远不会等于整数)并且true是整数1的类型转换。如果你想找到某些东西不等于你需要做的其他东西

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

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