如何使用ruby类正确设置 - Rails 5

问题描述 投票:0回答:1

我很困惑如何找到我的网络中没有邀请参加活动/社交使用rails方法set的朋友列表。

  • 我有friends列出我所有的朋友(总共2个朋友)
  • 我有一个社交/活动,我已邀请我网络中的所有朋友加入social_invited_friends
  • 我现在试图通过比较“social_univited_friendsfriends”找到不请自己的朋友social_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]"
    }
]

但我相信我应该没有任何回报,因为我邀请所有朋友参加活动/社交活动 - 我应该有类似下面的内容:

2.3.0 :207 >   ap social_univited_friends = friends.difference(social_invited_friends)
[ ]
ruby-on-rails ruby
1个回答
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将负责排列所有内容,以便在建立to_a时也可以放弃social_invited_friends调用。

您还应该能够在数据库中完成所有操作,但首先要使其工作。

© www.soinside.com 2019 - 2024. All rights reserved.