0

我有 3 张桌子 stauscode、wearquest 和员工。Worequest 属于员工和员工 has_many wearquests。Worequest属于statuscode,statuscode有很多wearquest。

我也有磨损任务的范围:

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

我正在尝试显示未完成的员工的磨损任务:

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

我得到的错误: G::Error: 错误:AND 的参数必须是布尔类型,而不是整数类型 LINE 1: ...uests" WHERE "worequests"."employee_id" = 2 AND (1) ORDER B...

我正在尝试查看 2 号员工。我不知道为什么将“and (1)”放入 SQL 中。

有任何想法吗?

谢谢!

4

2 回答 2

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 中

于 2012-05-15T17:23:50.247 回答
0

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

scope :notcompl, where("statuscode_id != #{Statuscode.last.id}").where(completed: true) 
于 2012-05-15T17:11:18.770 回答