1

我正在开发一个应用程序,在该应用程序中,用户可以与其他用户建立两种关系中的一种——要么favoriting他们,要么following他们——我想反向操作,is favorited by并且is being follow by也会作为我想要的方法出现打电话。

在制作用户模型时我应该考虑哪些因素?具体来说,我应该有一个模型,即关系,它指定:

Relationships
user_1 | relationship_type | user_2

关系类型在哪里favoritingfollowing

或者我应该有 2 个单独的模型:

Favorites
user_1 | user_2

Follows
user_1 | user_2

我对数据库不太了解,所以我能问一下在这两种潜在设置之间进行选择时的考虑因素是什么?2 比 3 更标准化还是更少?这有关系吗?在什么情况下?

更新

抱歉,这让我很震惊:假设有第三种关系,比如“reviews”/“reviewed_by”——问题是关于 3 个,而不是 2 个不同的双向关系类型。增加关系类型的数量会影响这一点吗?

Favorites
user_1 | user_2

Follows
user_1 | user_2

Reviews
user_1 | user_2
4

1 回答 1

2

我会在一张表中使用 2 个不同的模型,即使用单表继承模式。这样,您将获得一个看起来接近您的选项 #1 的 db 表,并且在对象模型方面拥有一个干净的模型,其中包含两个不同的收藏夹和关注类,从而产生更清晰的代码和命名。

至于命名,Michael Hartl 在他的示例中使用“followers”和“followed_users”,这似乎与您正在努力的内容非常相似: http ://ruby.railstutorial.org/chapters/following-users#top

于 2012-07-20T06:58:54.457 回答