繁体   English   中英

在轨道上与红宝石建立对称关系的最佳方法是什么?

[英]What is the best way to model a symmetric relation with ruby on rails?

我正在寻找一种在Rails中建模对称关系 (如用户之间的友谊)的优雅方法(尽管这可能更像是一个一般的数据库问题)。 我知道几种方法,但似乎都不太优雅:

  1. 用用户的外键创建一个user_user关系表。 我不喜欢它,因为它本质上是一个非对称解决方案。 我看到了一种方法,该方法将具有较低ID的用户强制进入第一列,而另一用户强制进入第二列,并使用union从两端查询关系。 感觉就像是骇客。

  2. 创建一个友谊表,其中每一行代表一个关系,并且:

    • 一对一:在用户表中添加一列以引用该关系
    • 对于多对多:添加一个user_friendship表,该表将为用户和友谊表保留一个外键。

    这种方法的问题在于,它看起来很麻烦,而且也没有任何东西可以强制2个用户完全共享友谊。

我希望有比这些更好的解决方案。 有任何想法吗?

我将创建一个模型Friendship,其中包含可以进行验证的朋友用户的外键,以确保仅通过执行以下操作即可与同一用户建立一个朋友关系:

validates :friend_id, :uniqueness => { :scope => :user_id }

我认为这是一个非常优雅的解决方案,具有很大的灵活性。 检出HAS_ONE:通过在轨协会指导指南活动记录关联 ,如果你要像友谊建模。

当然,还有has_and_belongs_to_many关联。 但是,它提供的灵活性不如创建模型那样灵活,因此通常不是一个好主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM