0

在 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

这是最好的方法吗?

4

3 回答 3

0

不,这不是最好的方法。

使用 ActsAsTaggableOn宝石。它专为您打造:)

于 2013-06-29T07:23:08.457 回答
0

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

关于概念多态和示例实践多态的更多细节

于 2013-06-29T13:59:49.837 回答
0

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

1)有一个Tag模型,它有_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 为您解决了这个问题,但您应该尝试了解它在幕后所做的事情。

于 2013-06-29T15:17:37.110 回答