2017-01-09 130 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電話。

你也應該能夠在數據庫中完成整個事情,但首先要做到這一點。