在Rails中,可以使用最多五个标签搜索帖子

时间:2013-06-29 07:18:20

标签: ruby-on-rails database-design

在Ruby on Rails中,我正在制作涉及可以标记的帖子的内容,例如最多5个标签。我希望能够通过标签索引帖子。

建模的方法是:

Post attributes include:
  tag1
  tag2
  tag3
  tag4
  tag5

然后,只要您想要找到带有标签的帖子,您就会执行以下操作:

posts = Post.find_all_by_tag1(name)
posts2 = Post.find_all_by_tag2(name)
posts3 = Post.find_all_by_tag3(name)
posts4 = Post.find_all_by_tag4(name)
posts5 = Post.find_all_by_tag5(name)
posts.concat posts2
posts.concat posts3
posts.concat posts4
posts.concat posts5

这是最好的方法吗?

3 个答案:

答案 0 :(得分:0)

不,这不是最好的方式。

使用ActsAsTaggableOn gem。它是为你而建的:)

答案 1 :(得分:0)

我建议制作一个表标签,属性是name,product_id。 当您的标签可以在另一个类中使用时。请使用多态关联,属性为name,tagable_id,tagable_type。

有关concept polymorphic和示例practice polymorphic

的更多详细信息

答案 2 :(得分:0)

不,这将需要5个查询,并可能导致重复的帖子!

1)拥有Tag模型,其中has_many:posts。每次您为帖子上的每个标签添加帖子find_or_create一个标签,然后关联帖子。 2)查找一组标签的所有帖子,例如:

SELECT posts.* FROM posts
INNER JOIN tags on tags.post_id = posts.id
AND tags.tag IN ('foo', 'bar', 'baz') 

这将找到可以连接到IN子句中至少一个标记的所有帖子。这解决了多个查询和后期复制的问题,并且不需要在可标记模型上重复。正如所指出的,ActsAsTaggableOn gem为您解决了这个问题,但您应该尝试了解它正在做什么。