在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
这是最好的方法吗?
答案 0 :(得分:0)
不,这不是最好的方式。
使用ActsAsTaggableOn gem。它是为你而建的:)
答案 1 :(得分:0)
我建议制作一个表标签,属性是name,product_id。 当您的标签可以在另一个类中使用时。请使用多态关联,属性为name,tagable_id,tagable_type。
的更多详细信息答案 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为您解决了这个问题,但您应该尝试了解它正在做什么。