2012-04-10 123 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 IDS的质量分配会发生。

+0

为什么不升级到更新版本的mongoid? – rubish 2012-04-10 19:24:11

+0

好吧,我会检查是否在新版本中更正了这种行为。你看到它在新版本中正常工作吗? – 2012-04-10 19:55:17

+0

我在我的视图中有很多这样的领域,他们对我来说工作得很好。我在2.2.2以及在切换到2.4.6之后使用了它。 – rubish 2012-04-11 06:17:15

回答

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,您也可以尝试以String对象而不是ObjectId的身份传递ID,这是通过POST参数传递的方式。

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

这个用法很有用。我的用法模拟Rails将处理POST参数的方式 - 批量分配ID数组。例如,如果教师是从多选列表中选择的,则参数列表中会包含一个教师ID列表,例如[1,2,3],然后将其分配给学生,即。 student.teacher_ids = [1,2,3] – 2012-04-10 19:02:35

+0

我已经更新了我的答案,好像所有不同的赋值方法在Mongoid 2.4.x中都能正常工作 – theTRON 2012-04-11 00:47:03