0

我尝试实现一个简单的应用程序,其中有用户,并从社交网络获取用户的友谊。我有两个具有以下列的模型:

User

  • id(默认标识)
  • sn_id(社交网络中用户的 id)

FriendsRelation

  • user1_sn_id(外键 到User.sn_id
  • user2_sn_id(外键 到User.sn_id

如何实施关联?

现在我在用户上写道:

has_many :friends1, :class_name =>"FriendsRelation", :foreign_key =>"user1_sn_id"
has_many :friends2, :class_name =>"FriendsRelation", :foreign_key =>"user2_sn_id"

问题是,如果我想获得用户的所有朋友,我必须使用u.friends1u.friends2但我如何摆脱不对称?

我应该在 FriendsRelation 上添加什么关联?

此外,FriendsRelation 表中的用户 ID 是来自社交网络的用户 ID,因为这对我来说更容易。这是个问题吗?我应该把用户ID代替吗?

4

1 回答 1

1

使用您自己的id而不是主键不是问题。只需确保没有重复并为该列添加索引。

关于 dissimetry 您有多种解决方案:

  • 根据两个 id 合并两个列表,例如def friends; friends1 + friends2; end
  • 将双记录(双向)添加到朋友表
  • 为关系指定自定义范围以从正确的角度反映关系

都有优点和缺点,但都是有效的解决方案 AFAIK。

于 2013-05-15T15:11:06.830 回答