Ruby on rails 如何正确使用ruby类集-Rails 5

Ruby on rails 如何正确使用ruby类集-Rails 5,ruby-on-rails,ruby,Ruby On Rails,Ruby,我对如何使用rails方法set查找网络中未被邀请参加活动/社交活动的朋友列表感到非常困惑 我有朋友,其中列出了我所有的朋友(总共2个朋友) 我有一个社交/活动,我邀请了我网络中的所有朋友参加social\u invested\u friends 我现在正在通过比较“朋友和社会邀请的朋友”来查找未邀请的朋友列表 请告诉我怎么做好吗 这是终点站 2.3.0 :207 > ap friends = Set.new((inviter.friends).to_a) [ [0] #&

我对如何使用rails方法
set
查找网络中未被邀请参加活动/社交活动的朋友列表感到非常困惑

  • 我有
    朋友
    ,其中列出了我所有的朋友(总共2个朋友)
  • 我有一个社交/活动,我邀请了我网络中的所有朋友参加
    social\u invested\u friends
  • 我现在正在通过比较“
    朋友
    社会邀请的朋友
    ”来查找未邀请的朋友列表
请告诉我怎么做好吗

这是终点站

2.3.0 :207 >   ap friends = Set.new((inviter.friends).to_a)
[
    [0] #<User:0x007fa6f882adb0> {
                            :id => 2,
                         :email => "emma@gmail.com"
    },
    [1] #<User:0x007fa6f7191db0> {
                            :id => 4,
                         :email => "jesse@gmail.com"
    }
]







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 => "emma@gmail.com"
        },
        [1] #<User:0x007fa6f7191db0> {
                                :id => 4,
                             :email => "jesse@gmail.com"
        }
    ]
]
 => nil 
2.3.0 :214 >
我在终端中得到以下结果

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

仔细查看ap社交网站邀请的朋友:

[
    [0] [
        [0] #<User ...
        [1] #<User ...
    ]
]
[
    [0] #<User ...
    [1] #<User ...
]
Set.new(
  Invite.where(...)
        .flat_map(&:users)
)
social\u invested\u friends
是一个包含一个元素的集合,该元素是由
User
实例组成的两个元素数组
friends
是包含两个元素的集合,这两个元素是
User
实例

在构建社交朋友时,您可能希望使用而不是
map

[
    [0] [
        [0] #<User ...
        [1] #<User ...
    ]
]
[
    [0] #<User ...
    [1] #<User ...
]
Set.new(
  Invite.where(...)
        .flat_map(&:users)
)
flat\u map
也会处理数组化所有内容,这样你也可以在构建
社交好友时将
放到a
呼叫中

您还应该能够在数据库中完成整个工作,但首先要让它工作起来