Rails:查找相关记录

时间:2015-01-24 17:50:19

标签: ruby-on-rails ruby sorting ruby-on-rails-4 tags

我使用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 Howa我可以实现这个

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

1 个答案:

答案 0 :(得分:1)

我不熟悉这个宝石,但你可以这样做。假设您希望获得类似文章的主要文章名为@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

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