我在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所示。
答案 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]