2012-04-10 2 views
0

я вижу какое-то странное поведение в Mongoid 2.3.4Mongoid - Присваивание массива

class Student 
    has_and_belongs_to_many: teachers 
end 

class Teacher 
    has_and_belongs_to_many: students 
end 

В настоящее время в IRB

s = Student.first 
s.teachers 
=> [] 

s.teacher_ids = [Teacher.first.id, Teacher.last.id] 
s.teacher_ids 
=> [[BSON::ObjectId4f7c3300913417162c000008, BSON::ObjectId4f7c333b913417162c00000d]] 

Не знаю, почему этот массив вложен так. Я ожидал, что

[BSON::ObjectId4f7c3300913417162c000008, BSON::ObjectId4f7c333b913417162c00000d] 

Это разбивает множественный выбор поля в Rails, где массовые присвоения идентификаторов будут происходить, как показаны в IRB.

+0

Почему бы вам не перейти на более новую версию мангоида? – rubish

+0

Хорошо, я проверю, исправлено ли это поведение в более новых версиях. Вы видите, что он работает правильно в более новой версии? –

+0

У меня много таких полей в моих взглядах, и они отлично работают для меня. У меня это работало в 2.2.2, а также после перехода на 2.4.6 – rubish

ответ

2

Возможно, это связано с тем, что вы пытаетесь установить атрибут teachers_ids в массив объектов Teacher.

Вы могли бы попробовать это в качестве альтернативы:

s.teachers = [Teacher.first, Teacher.last] 

или

s.teachers << Teacher.first 
s.teachers << Teacher.last 

Update:

Я просто запустить небольшой тест и может подтвердить, что ваш метод присвоения отлично работает в Mongoid 2.4.6 (именно это я и установил) и 2.4.8.

Если по какой-либо причине вы не можете перейти на Mongoid 2.4, вы также можете попробовать передать идентификаторы в виде String объектов, а не как ObjectId, что и было бы обработано, если бы это передавалось через параметры POST.

s.teacher_ids = [Teacher.first.id.to_s, Teacher.last.id.to_s] 
+0

Это использование работает. Мое использование имитирует способ управления Rails параметрами POST - mass назначает массив идентификаторов. Например, если учитель выбирается из списка с несколькими выборами, параметры post будут иметь список идентификаторов учителя, например [1,2,3], которые затем будут назначены ученику, т.е. student.teacher_ids = [1,2,3] –

+0

Я обновил свой ответ, похоже, что все различные методы присваивания отлично работают в Mongoid 2.4.x – theTRON

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