Rails:查找相关记录

Rails: find related records

我正在使用 act-as-taggable gem 并希望根据最大相似标签对给定文章的相似文章进行排序,例如,我有一篇文章必须显示其相关文章并且是标记为

([“awesome”, “cool”, "foo", "bar", "rails"])

和其他标有

的人

A1= ([“awesome”, “cool”, "foo", "bar", "rails"])

A2= ([“awesome”, “cool”, "foo", "bar", "python"])

A3= ([“awesome”, “cool”, "foo", "python", "django"])

在相关文章的排序中,A1必须是第一个,其次是A2,最后是A3,我怎么能做到这一点

实际上我正在做的是 @related_articles = Article.tagged_with(@article.tag_list, any: true) 但是这会显示所有只有一个相似标签的标签所以即使有一些文章有 5 或 4 个相似标签它们也不会是第一个,另一个解决方案是使用 :match_all => true 但如果没有包含所有此标签的文章,则相关文章将为零,所以我想知道如何实现这一点?

我不熟悉这个gem,但你可以这样做。假设您想从中获取类似文章的主要文章名为 @article 并且其标签可通过 @article.tag_list 访问,您可以这样做:

1 - 获取与 @article:

中任何标签相匹配的所有文章
@related_articles = Article.tagged_with(@article.tag_list, any: true)

2 - 之后对它们进行排序:

@related_articles.sort_by { |ra| (ra.tag_list & @article.tag_list).size }.reverse

这里的关键是 & 运算符。在控制台上玩它:)