Ruby on rails:非id键上的多个列的关联

时间:2013-05-15 15:01:37

标签: ruby-on-rails ruby associations

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

User

  • id(默认ID)
  • sn_id(来自社交网络中用户的ID)

FriendsRelation

  • user1_sn_idUser.sn_id的外键)
  • user2_sn_idUser.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吗?

1 个答案:

答案 0 :(得分:1)

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

关于分散度,您有多种解决方案:

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

所有都有利弊,但都是有效的解决方案AFAIK。