我有一个像这样的友谊模型:
Friendship (user_id, friend_id, status)
只有1条记录在用户A和用户B之间建立友谊.user_id是在friend_id上发起的用户。在创建状态为“待定”。当friend_id批准或忽略时,该状态将更新。
给予关系。如何获得用户的所有联系人?查询需要跨user_id和friend_id进行查询,这就是为什么@ user.friendships不起作用的原因。这只会显示创建的朋友。
想法?
答案 0 :(得分:0)
我构建了一个rails应用程序,需要维护人与人之间关系的谱系。我所做的是为每个关系创建相等和相反的地图,例如[a,b,father],[b,a,son]使用after_create
,after_update
和after_destroy
触发器。我这样做的原因是我希望在人与人之间进行非常快速的搜索。效果很好。
创建代码如下所示:
def after_create(record)
if ! record.relative.has_relative(record.person_id)
new_relationship = Relationship.new(:relative => record.person,
:relationship => hantai(record.relative.gender, record.person.gender, record.relationship))
record.relative.relationships << new_relationship
record.relative.save
end
end
Relationship
对象与Friendship
对象相同,而record
就是此人。