【问题标题】:Rails: find related recordsRails:查找相关记录
【发布时间】:2015-01-24 17:50:18
【问题描述】:

我正在使用 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个相似标签,它们也不会是第一个,另一种解决方案是使用@987654326 @ 但是如果没有带有所有这些标签的文章,则相关文章将为零,所以我想知道如何实现这一点?

【问题讨论】:

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


    【解决方案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
    

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

    【讨论】:

    • 这似乎是一个可行的解决方案,我还没有对其进行大量测试,但是让你失望
    猜你喜欢
    • 2020-02-04
    • 2014-12-08
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    相关资源
    最近更新 更多