2012-05-15 1 views
0

У меня есть 3 столов stauscode, worequest и employee. Worequest принадлежит работнику и работнику has_many worequests. Worequest принадлежит коду состояния, а в коде состояния есть много worequests.RoR generated sql имеет где

У меня также есть простор для worequest:

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

Я пытаюсь отобразить worequests для работника, которые не завершены:

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

Я получаю ошибку: G: : Ошибка: ERROR: аргумент AND должен быть логическим, а не целочисленным. LINE 1: ... uests «WHERE» worequests ».« Employee_id »= 2 AND (1) ORDER B ...

Я пытаюсь просмотреть номер сотрудника 2. Я не могу понять, почему он помещает «и (1)» в SQL.

Любые идеи?

Спасибо!

+0

Сгенерированный SQL -: SELECT "worequests". * FROM "worequests" WHERE "worequests". "Employee_id" = 2 AND (1) ORDER BY id DESC. Я не могу понять, почему AND (1) бросается в него. – Reddirt

ответ

0

Вашего охват

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

сломан. В отличие от некоторых рубина ORMs, ActiveRecord не переопределяет методы символов, так что там, где только заканчивается время

where(true,true) 

(так ясно, что символ никогда не равен целому числу) и верно в настоящее время типаж к целому числу 1. Если вы хотите, чтобы найти строки, где что-нибудь не равно что-то еще нужно сделать

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

Также обратите внимание, что это будет использовать то, что последний код состояния был в точке, где находится файл с этой области был загружен в - вы захотите обернуть область в лямбда, если ваше приложение создает коды состояния по мере их запуска.

+0

Я изменил его на: scope: notcompl, где («statuscode_id! =?», Statuscode.last.id), и он сработал. БЛАГОДАРЯ – Reddirt

0

Вы пропустили указание compelted (?) Название колонки? Если да, то вы должны переписать сферу:

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

Нет, последний код состояния завершен. Завершено нет другого столбца. Может быть, это должно быть - подумать об этом. – Reddirt

+0

PS - область действия ОК, когда я просто перечисляю завершенные или не завершенные worequests. – Reddirt

Смежные вопросы