我有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中。
有什么想法吗?
谢谢!
答案 0 :(得分:0)
您是否错过了指定compelted
(status
?)列名称?如果是这样,您应该重写范围:
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中