2017-01-09 7 views
0

私のネットワーク上で、イベント/社会に招待されていない友人のリストを見つける方法は、レールの方法setを使ってどのように見つけるのか非常に混乱しています。私は今見つけるしようとしています、私はすべての私の友人(合計で2人の友人) ruby​​ classの使い方 - Rails 5

  • をリストfriendsは私がsocial_invited_friends
  • に自分のネットワーク内のすべての私の友人を招待してきた社会的/イベントを持ってい

    friendssocial_invited_friends」を比較することにより、招かれざる友人social_univited_friendsのリストは、一つは親切にこれを行う方法を私に助言するだろうか?

    これは、端末

    2.3.0 :207 > ap friends = Set.new((inviter.friends).to_a) 
    [ 
        [0] #<User:0x007fa6f882adb0> { 
              :id => 2, 
             :email => "[email protected]" 
        }, 
        [1] #<User:0x007fa6f7191db0> { 
              :id => 4, 
             :email => "[email protected]" 
        } 
    ] 
    
    
    
    
    
    
    
    2.3.0 :213 > ap social_invited_friends = Set.new(Invite.where(user: inviter, invitee: nil, social: social).to_a.map(&:users)) 
        Invite Load (0.2ms) SELECT "invites".* FROM "invites" WHERE "invites"."user_id" = 1 AND "invites"."invitee_id" IS NULL AND "invites"."social_id" = 6 
        User Load (0.1ms) SELECT "users".* FROM "users" INNER JOIN "invites_users" ON "users"."id" = "invites_users"."user_id" WHERE "invites_users"."invite_id" = ? [["invite_id", 30]] 
        User Load (0.3ms) SELECT "users".* FROM "users" INNER JOIN "invites_users" ON "users"."id" = "invites_users"."user_id" WHERE "invites_users"."invite_id" = ? [["invite_id", 31]] 
    [ 
        [0] [ 
         [0] #<User:0x007fa6f7191f90> { 
               :id => 2, 
              :email => "[email protected]" 
         }, 
         [1] #<User:0x007fa6f7191db0> { 
               :id => 4, 
              :email => "[email protected]" 
         } 
        ] 
    ] 
    => nil 
    2.3.0 :214 > 
    

    私は

    social_univited_friends = friends.difference(social_invited_friends) 
    

    の下にしようとしたとき、私は、端末

    2.3.0 :207 > ap social_univited_friends = friends.difference(social_invited_friends) 
    [ 
        [0] #<User:0x007fa6f882adb0> { 
              :id => 2, 
             :email => "[email protected]" 
        }, 
        [1] #<User:0x007fa6f7191db0> { 
              :id => 4, 
             :email => "[email protected]" 
        } 
    ] 
    

    に以下の結果を得たが、私は持っていなければならないと信じています私はすべての私の友人を偶数に招待しているので、何も返されませんap friends

    [ 
        [0] [ 
         [0] #<User ... 
         [1] #<User ... 
        ] 
    ] 
    

    、その後:ap social_invited_friendsで慎重

    2.3.0 :207 > ap social_univited_friends = friends.difference(social_invited_friends) 
    [ ] 
    
  • 答えて

    1

    ルック: - トン/社会的なiは以下のようなものを持っている必要があり

    [ 
        [0] #<User ... 
        [1] #<User ... 
    ] 
    

    social_invited_friendsは一つの要素とセットでその要素はUserインスタンスの2要素配列です。 friendsは、Userという2つの要素を持つセットです。 social_invited_friendsを構築する際

    はおそらくmapの代わりにflat_mapを使用したい:あまりにもsocial_invited_friendsを構築するときに、あなたがto_aコールをドロップすることができるように

    Set.new(
        Invite.where(...) 
         .flat_map(&:users) 
    ) 
    

    flat_mapも、アレイifyingすべての世話をします。

    また、データベース内のすべてを実行することができますが、まずそれを動作させる必要があります。

    関連する問題