Mongoid - 数组赋值

时间:2012-04-10 11:21:46

标签: mongoid

我在Mongoid 2.3.4中看到了一些奇怪的行为

 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中的多选字段,其中id的质量分配将发生,如IRB所示。

1 个答案:

答案 0 :(得分:2)

这可能与您尝试将teachers_ids属性设置为Teacher个对象数组的事实有关。

你可以尝试这些作为替代品:

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

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

<强>更新

我刚刚进行了一些测试,可以确认您的分配方法在Mongoid 2.4.6(这正是我碰巧安装的)和2.4.8中工作正常。

如果由于某种原因你无法升级到Mongoid 2.4,你也可以尝试将ID作为String对象而不是ObjectId传递,如果这是通过POST参数传入。

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