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
这里的关键是 &
运算符。在控制台上玩它:)
我正在使用 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
这里的关键是 &
运算符。在控制台上玩它:)