0

私はMongoid、Rails、Fabricationsを使用していますが、これがどのように行われているのかまったくわかりません。どんな考えでも非常にありがたいです、しかし私はこれがかなり複雑であることを知っています。ユーザーを作成し、4つのグループに参加したいのですが、8つがロードされ続けています。

これが私のコードの関連セクションです

@ user1 = Fabricate.build(:registered)
@ user1.joined_groups << [common_group、
                             cali_group、
                             ca46、
                             Fabricate(:polco_group、{:name => "Gang of 13"、:type =>:custom})]

実行する@user1.joined_groups.sizeと4が得られますが、実行すると@user1.joined_groups.map(&:name)8つのレコードが得られます。

#<PolcoGroup _id:1 ... member_ids:[]、follower_ids:[]>
#<PolcoGroup _id:1 ... member_ids:[]、follower_ids:[]>
#<PolcoGroup _id:1 ... member_ids:[]、follower_ids:[]>
#<PolcoGroup _id:1 ... member_ids:[]、follower_ids:[]>
#<PolcoGroup _id:1 ... member_ids:[1、1、1、1、1、1、1、1、1、1、1、1、1、1]、follower_ids:[1、1] >>
#<PolcoGroup _id:1 ... member_ids:[1、1、1、1、1、1、1、1、1、1、1、1、1、1]、follower_ids:[1、1] >>
#<PolcoGroup _id:1 ... member_ids:[1、1、1、1、1、1、1、1、1、1、1、1、1、1]、follower_ids:[1、1] >>
#<PolcoGroup _id:1 ... member_ids:[1、1、1、1、1、1、1、1、1、1、1、1、1、1]、follower_ids:[1、1] >>

(ここで、すべてのBSON :: ObjectId( '4eab3ca5f11aac2701000009')ステートメントをステートメントに置き換え、多くの中間コードを削除しました。

コードの完全なセットは、https ://gist.github.com/1323984で入手できます。

ほとんどの奇妙な単にマップを呼び出すことが問題を引き起こしている可能性があります。

    「これらのグループで作成されたばかりのユーザー」を配置します。
    @ user1.joined_groups.map(&:name)を置きます
    「次に」を置く
    @ user1.joined_groups.map(&:name)を置きます

これを生成します(!):

これらのグループで作成されたばかりのユーザー:
ダン・コール
CA
CA46
13のギャング
次に第二に
ダン・コール
CA
CA46
13のギャング
ダン・コール
CA
CA46
13のギャング

洞察をありがとう!何度も試みた後、ターミナルでこれを複製する方法がわからないので、Fabricationgemを疑っています。(更新:いいえ、標準のMongoidオブジェクトでこのエラーが発生するため、Mongoidを完全に非難しています。)

ティム

4

1 に答える 1

1

問題は、単にグループをユーザーに正しくプッシュしていないことだと思います。それらを使用するconcatか、別々にシャベルで削ってみてください。

@user1.joined_groups.concat([common_group,
                         cali_group,
                         ca46,
                         Fabricate(:polco_group, {:name => "Gang of 13", :type => :custom})])
于 2012-07-12T14:15:51.777 に答える