我有一个应用程序,允许用户将任务分配给系统中的人。
一旦我输入“与 some_user@example.com 分享”,用户将收到一封电子邮件,我将不得不以某种方式说明我与该用户有待处理的友谊。
我的友谊表设置如下:
user_id:整数,friend_id:整数,状态:字符串
场景:添加好友 Steve 的 user_id = 2, fred 的 user_id = 6 当一个好友开始时,我在好友表中添加两行: (user_id,friend_id, status) (2, 6, requested) (6, 2, pending)
这涵盖了双方的友谊。
我的问题是,处理与尚未注册的用户的友谊的好习惯是什么。
到目前为止,我这样做的方式是将电子邮件置于状态(这对我来说感觉不对),并向受邀用户发送一个带有令牌的链接。当用户单击该链接时。他们将 url 中的令牌传递给注册页面。如果在注册时,我的控制器看到该令牌,我将在友谊表中搜索 Friendships.status = "invited_user@email.com" 并更新该记录以指向新创建的用户的 ID。
这对我来说感觉很脏(存储电子邮件地址并搜索它们)。
我刚刚想出的另一个解决方案是建立友谊的一面(user_id = 3,friend_id = null,status =“invited”)
并使用 query_string http://www.myapp.com/sign_up?invited_by=john@email.com发送邀请。
有了它,我可以通过电子邮件找到 john 的 id,找到 user_id = john.id AND status = "invite" 的朋友,并用我新创建的 user_id 更新它:公认”)
然后创建另一半的友谊:(user_id = 36,friend_id = john.id, status = "accepted")
没有在 url 中发送或嵌入混乱的令牌(只是通过电子邮件作为查询字符串邀请)。
如果一个用户有多个邀请,那并不重要,因为任何状态为“邀请”的记录都可以使用,因为我们还不知道被邀请用户的 ID。
有什么想法或更好的做法吗?