2012-04-10 8 views
0

この配列は、そのようにネストされている理由は、私が Mongoid - 配列代入

s = Student.first 
s.teachers 
=> [] 

s.teacher_ids = [Teacher.first.id, Teacher.last.id] 
s.teacher_ids 
=> [[BSON::ObjectId4f7c3300913417162c000008, BSON::ObjectId4f7c333b913417162c00000d]] 

わからないIRB

で今

class Student 
    has_and_belongs_to_many: teachers 
end 

class Teacher 
    has_and_belongs_to_many: students 
end 

Mongoid 2.3.4にいくつかの奇妙な行動を見ています。私は期待しました

[BSON::ObjectId4f7c3300913417162c000008, BSON::ObjectId4f7c333b913417162c00000d] 

これは、IRBに表示されているようにIDの大量割り当てが行われる、Railsの複数選択フィールドを分割します。

+0

新しいバージョンのmongoidにアップグレードしてみませんか? – rubish

+0

[OK]を、その動作が新しいバージョンで修正されているかどうかを確認します。それは新しいバージョンで正しく動作していますか? –

+0

私は自分の意見にこのようなフィールドをたくさん持っています。私は2.2.2で作業していましたが、2.4.6への切り替え後も – rubish

答えて

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にアップグレードできない場合は、ObjectIdの代わりにStringオブジェクトとしてIDを渡すこともできます。これはPOSTパラメータで渡された場合の処理​​方法です。

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

その使用方法が動作します。私の使い方は、RailsがPOSTパラメータを処理する方法をシミュレートしています。例えば、教師が複数選択リストから選択されている場合、ポストパラメータには[1,2,3]のような教師IDのリストがあり、それは学生に大量に割り当てられます。 student.teacher_ids = [1,2,3] –

+0

私の答えを更新しました.Mongoid 2.4.xではすべての異なる割り当て方法がうまく動作しているようです – theTRON

関連する問題