0

我在 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 中所示。

4

1 回答 1

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对象而不是 asObjectId传递,如果这是通过 POST 参数传递的,将是这样处理的。

s.teacher_ids = [Teacher.first.id.to_s, Teacher.last.id.to_s]
于 2012-04-10T13:47:16.583 回答