Rails 中的“关注”和“收藏”关系模型——一个主模型或每个关系的特定模型
Posted
技术标签:
【中文标题】Rails 中的“关注”和“收藏”关系模型——一个主模型或每个关系的特定模型【英文标题】:"Following" and "favorites" relationship models in Rails---one master model or specific models for each relationship 【发布时间】:2012-07-20 06:36:43 【问题描述】:我正在开发一个应用程序,用户可以与其他用户建立两种关系之一——favoriting
他们,或者following
他们——我想相反的操作,@987654323 @ 和 is being follow by
也将作为我想要调用的方法出现。
在制作用户模型时我应该考虑哪些因素?具体来说,我应该有一个模型,即关系,它指定:
Relationships
user_1 | relationship_type | user_2
其中的 relationship_type 是 favoriting
还是 following
?
或者我应该有 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
【问题讨论】:
使用更好的命名使其更易于阅读。使用诸如喜爱用户和喜爱用户的东西。使用方法#1 【参考方案1】:我会在一个表中使用 2 个不同的模型,即使用单表继承模式。 这样,您将获得一个看起来接近您的选项 #1 的 db 表,并拥有一个干净的模型,其中包含对象模型端的收藏夹和关注两个不同的类,从而产生更清晰的代码和命名。
至于命名,Michael Hartl 在他的示例中使用了“followers”和“followed_users”,这似乎与您正在努力的内容非常相似: http://ruby.railstutorial.org/chapters/following-users#top
【讨论】:
我正要说:这也便于扩展,以防您只想添加与用户的另一个关系,然后我看到了您的更新 ;-)以上是关于Rails 中的“关注”和“收藏”关系模型——一个主模型或每个关系的特定模型的主要内容,如果未能解决你的问题,请参考以下文章