0

Mongoid2.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の複数選択フィールドが壊れ、IRBに示されているようにIDの一括割り当てが行われます。

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 を asStringではなくオブジェクトとして渡すこともできObjectIdます。これは、これが POST パラメータを介して渡された場合の処理​​方法です。

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