在Rails应用程序中实现类似Gmail的标签

时间:2010-12-14 22:04:53

标签: ruby-on-rails database-design

这是一个应用程序设计问题,然后是一个特定的Rails问题。我正在尝试在Gmail中实施类似“标签”的系统。所以我希望用户能够将标签(或许多)应用于特定帖子。但是,我还希望用户能够使用标准Rails CRUD管理标签。

假设我有一个名为Post的模型。所以用户有很多帖子。用户可以创建与帖子分开的标签,但也可以使用“发布新/编辑”视图中的复选框将这些标签应用于帖子。如果用户删除了特定标签,它只会从Post视图中删除,并且不会以任何其他方式影响Post。

这种情况表明我对数据库关系缺乏了解,但这是否与has_many_and_belongs_to_many关系有关?

如果是这样,以下设计是否可以实现此目的?

  • 用户has_many帖子
  • 用户has_many标签
  • 发布has_many_and_belongs_to_many 标签
  • 标签has_many_and_belongs_to_many 帖子

也许我在想这个,我的逻辑已经过时了。

3 个答案:

答案 0 :(得分:1)

从您的问题来看,您似乎正在尝试构建分类系统(即标记模型)。您可能希望查看Acts As Taggable On作为问题的可能解决方案(或只是一个有趣的建模参考)。

答案 1 :(得分:1)

您必须决定是否希望标签由人“拥有”或仅由人们“使用”。在gmail中,我的标签对我来说非常具体。在SO中,即使我可以创建它们,标签也不是我特有的。

如果你想要标签而不是标签,那么是。

User  ---< Label
Label >--< Post
User  ---< Post

如果需要,您可以用英语定义这些。

A user has zero, one or more Labels
A Label is used by one and only one user
A user has  zero, one or more posts
A post is created by one and only one user
A post has  zero, one or more labels
a label is applied to  zero, one or more posts

我不会说你已经过度考虑了这个概念数据模型。

答案 2 :(得分:0)

听起来您可以通过标签实现此功能。查看this post以获取有关rails的标记插件和gem的列表。