在rails中为多态模型添加标签

时间:2010-10-05 13:35:00

标签: ruby-on-rails tagging polymorphic-associations

我正在为多个模型添加标签(帖子,文章,照片等)。我知道rails标记插件但不想使用它们,因为它们不能满足我的特定需求。

我知道实现多态标记支持的典型方法是使用2个表Tag,Taggings并设置适当的has_many:通过关系。

但是,正如我想的那样 - 这是我的问题:是否需要一个Tags表。使用Taggings表是否存在任何缺点,并且我的关系是这样的:

Post, Article, Photo
has_many :taggings

Taggings (attributes)
taggable_type
taggable_id
tag_name

然后我只需要自己管理插入/删除标记。基本上,我只想将tag_name属性直接存储在Taggings表中而不是Tags表中。

优点是消除了管理表,没有连接来获取标签名称(虽然我会做很多SELECT DISTINCT)。

你能告诉我你对这个设计的想法吗?

感谢。

1 个答案:

答案 0 :(得分:1)

那些SELECT DISTINCT将成为一个缺点。您将发现构建标记列表的速度很慢,而不仅仅是建立链接索引(我可以通过片段缓存来处理),还可以自动完成。

我认为更重要的缺点是,如果你使用的是应用内搜索解决方案(例如Xapian),你需要索引Taggings表,这可能会产生一些奇怪的结果,或者不是索引标签,根据你使用它们的方式,可能会破坏标签的位置。

当然,没有人说你绝对不应该这样做;跳过额外的连接将使一些事情变得更快。你很聪明地看待成本并决定它是否值得。