2012-04-10 88 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