Ruby on rails Rails:查找相关记录

Ruby on rails Rails:查找相关记录,ruby-on-rails,ruby,sorting,ruby-on-rails-4,tags,Ruby On Rails,Ruby,Sorting,Ruby On Rails 4,Tags,我正在使用act as taggable gem,并希望根据最大相似标记对类似文章与给定文章进行排序,例如,我有一篇文章,我必须显示它们的相关文章并用其进行标记 ([“棒极了”、“酷极了”、“富极了”、“酒吧”、“rails”) 还有另一个被标记为 A1=([“棒极了”、“酷极了”、“富极了”、“棒极了”、“轨道”) A2=([“棒极了”、“酷极了”、“富极了”、“棒极了”、“python”) A3=([“棒极了”、“酷极了”、“富极了”、“python”、“django”) 在相关文章的排序中

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

([“棒极了”、“酷极了”、“富极了”、“酒吧”、“rails”)

还有另一个被标记为

A1=
([“棒极了”、“酷极了”、“富极了”、“棒极了”、“轨道”)

A2=
([“棒极了”、“酷极了”、“富极了”、“棒极了”、“python”)

A3=
([“棒极了”、“酷极了”、“富极了”、“python”、“django”)

在相关文章的排序中,A1必须是第一个,然后是A2,最后是A3。我如何才能做到这一点


实际上,我正在做的是
@related\u articles=Article.taged\u with(@Article.tag\u 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

这里的键是
操作符。在控制台上玩它:)

这似乎是一个有效的解决方案,我还没有对它进行过很多测试,但可以告诉你