我使用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
但如果没有包含所有这些标签的文章,相关文章将为零,所以我想知道如何实现这一目标?
答案 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
这里的关键是&
运算符。在控制台上玩它:)