2017-01-09 132 views
0

我很困惑如何找到我的网络中未使用rails方法邀请到事件/社交的朋友列表set如何使用红宝石类设置正确 - Rails 5

  • 我有friends其中列出我所有的朋友(2个朋友共)
  • 我有一个社会/事件,我还邀请我所有的朋友在我的网络,以social_invited_friends
  • 现在我试图找到不请自来的朋友social_univited_friends通过比较“friendssocial_invited_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]" 
    } 
] 

,但我相信我应该有因为我已经邀请我所有的朋友来参加比赛T /社会 - 我应该有类似下面:

2.3.0 :207 > ap social_univited_friends = friends.difference(social_invited_friends) 
[ ] 

回答

1

ap social_invited_friends仔细看:

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

,然后在ap friends

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

social_invited_friends是一组具有一个元素并且该元素是User实例的两个元素数组; friends是具有User实例的两个元素的集合。

你可能想使用flat_map而不是map建设social_invited_friends时:

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

flat_map会照顾阵列ifying一切太让您可以构建social_invited_friends当过掉落to_a电话。

你也应该能够在数据库中完成整个事情,但首先要做到这一点。