2016-02-12 8 views
0

У меня есть массив ID, который я хотел бы сохранить, а затем удалить остальные, у нас есть 3 типа пользователей, Admins, Investors и Students. Список, который у меня есть, для Students id, поэтому я хотел бы удалить все.Rails where.not с несколькими аргументами

Если я пытаюсь запустить этот

User.where.not(id: GOOD_LIST).count(:all) 

я буду получать 15k записи. но если я попробую добавить дополнительное условие

User.where.not(id: GOOD_LIST).where(type: "Student").count(:all) 
or 
User.where.not('id IN ? AND type = ?', GOOD_LIST, "Student").count(:all) 

Он вернет 0 записей.

Я попытался просто используя метод, где

User.where('id NOT IN ?', GOOD_LIST).where(type: "Student").count(:all) 

но получил следующее сообщение об ошибке

(10.7ms) SELECT COUNT(*) FROM "users" WHERE "users"."type" = 'Student' AND (id NOT IN 39999,40000,40001,40002,40003,40004,40005,40006,40007,40008) 
PG::SyntaxError: ERROR: syntax error at or near "39999" 
LINE 1: ... WHERE "users"."type" = 'student' AND (id NOT IN 39999,4000... 

Что такое лучший способ сделать это?

+2

Как насчет '.where ('id NOT IN (?)', GOOD_LIST)'? –

+0

У вас есть этот 'User.where (" id NOT IN (?) AND type =? ", GOOD_LIST," Student "). Count' –

+0

Кроме того, это' 'student '' или '" Student "' в дб? –

ответ

1

В этом выпуске SQL отсутствуют круглые скобки по всему списку. Так что мы должны добавить их в ваш шаблон, как это

.where('id NOT IN (?)', GOOD_LIST) 
Смежные вопросы