2016-03-17 2 views
0

В моей модели курса есть поле user_ids, которое представляет собой массив ObjectIds.Активная запись delete_all проблема с пустым полем

Я пытаюсь найти все курсы без пустых user_ids и отключить только поле user_id.

list = Course.where({ :user_ids.nin => [[], nil] }) 
list.each do |course| 
    course.user_ids = [] 
    course.save 
end 

Однако, я всегда, кажется, получают два курса, которые имеют:

"user_ids" : [ ObjectId("560dc9998b3c5b003f000000") ] 

Является ли мой запрос неправильно? Любая помощь приветствуется.

+0

Ваш вопрос гласит, что вы хотите найти все курсы, в которых есть пустое или ничтожество 'user_ids', а затем установите их в' [] '. Итак, вы хотите найти курсы, которые имеют 'user_ids == []' и установить его в '[]' ...? Зачем? Похоже, вы хотите установить что-то равное тому, что уже есть. – yez

+0

Извините, не пуст. Отредактировано Q. – premunk

ответ

1

Я думаю, вы хотите использовать метод where.not.

Course.where.not(user_ids: [[], nil])

You can read more about where.not here

Причина исходный запрос не работает, потому что вы пытались вызвать метод .nin:user_id на символ, который не является методом, что символ может принять.

+0

Согласовано. Но не могли бы вы объяснить, почему моя неудача? – premunk

+0

Отредактировано с разъяснением причин отказа вашего кода. – yez