Rails 如何实现一个类似 Facebook/ 人人网的添加好友系统?

zzz6519003 · 2014年10月10日 · 最后由 zzz6519003 回复于 2017年10月20日 · 2875 次阅读

首先这肯定是个多对多的系统,用一个中间表 Friendship. 我能想到的是这个 Friendship 有几个状态:request sent denied request approved

比如我看到一个美女,加他, 这个时候建个 Friendship, status => request sent,

美女看了我的头像,觉得太丑了,status => denied (有这个必要么,要不要直接删掉这个 Friendship) 我果然还是太帅了,status =>approved (顺便这个 status 栏位是不是可以删掉了。。)

我这么考虑可以么~

人与人之间的关系应该是唯一的吧, 如果你删掉 Friendship,那么就代表可以重复发送请求。 如果你将 Friendship.status = denied, 那还能不能继续呢? 所以说应该设计一个状态机制。

friendship 就应该简单,是朋友就有记录,不是就没有。 加好友这些应该放到 notifications 通知系统里面。

#1 楼 @MrPasserby 能不能继续 很好的问题啊~~ 设计一个状态机制?您具体指的是?~~

设计没啥,麻烦的是好友推荐算法以及其中大数据的处理,当然前提是你的用户量大。

我想这么做。A 向 B 申请的时候建立一个(A,B)的关系数据行。B 同意了,就建立一个(B,A)的关系。否则直接删掉(A,B)的关系。

#5 楼 @lithium4010 我觉得这是可行的 就是可能有点冗余 👏

#6 楼 @zzz6519003 这样好像找某个人的所有好友这种比较方便吧😁 因为如果用一条数据来记录一个双向关系的话,如: (A1, B1) (A1, B2) (A1, B3) (B4, A1) 要找 A1 的所有好友:( select col2 where col1 = "A1" ) + ( select col1 where col2="A1" )

如果记两条,就只用 select col2 where col1="A1" 了

而且这样,可以知道什么 A 什么时候申请的 B 的好友,B 什么时候答应的

@lgn21st 国宁老师指导下!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号