【问题标题】:Best way to recommend Products to Users based on Interest?根据兴趣向用户推荐产品的最佳方式?
【发布时间】:2012-12-31 21:12:46
【问题描述】:

假设每个产品都有一个类别。我想要求用户选择用户感兴趣的几个类别,并找到具有相同类别的产品。这类似于 Quora、Stumbleupon 和 Pinterest 所做的一切。

在 Rails 中设置这种数据库结构的最佳方法是什么?我应该创建 3 个表:用户、产品和类别,并建立关系 用户有很多类别和产品有很多类别?

我看到的问题是它不是为每一行用户和产品创建而不是引用类别的新实例吗?

*extra:如果我想要子类别怎么办?例如,如果用户选择了技术,它可能会进一步要求在 Web 开发、移动开发、硬件等之间进行选择。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 database-design activerecord recommendation-engine


    【解决方案1】:

    你可以很容易地做到那种“推荐”。

    这样的东西应该可以工作(注意:我没有测试这段代码,但它在精神上是正确的):

    def recommended_products
      joins(:categories, :products).where("product_id not in (?)", self.products)
    end
    

    每一位的解释:

    joins(:categories, :products):这会执行用户、产品和类别的 SQL 连接。这为您提供了一个“表格”,其中每个用户-产品-类别组合都在其自己的行中。

    .where("product_id not in (?)", self.products):添加SQL where子句,过滤掉当前用户产品列表中所有有产品的行。

    关联不是问题。它们不会自己创建任何新实例,只有当您编写自己的代码来创建新实例时。

    至于子类别,我认为您最好将其作为自己的问题,因为它本身很容易成为一个完整的帖子。

    【讨论】:

    • 感谢您的回答!那么这会放在哪里呢?用户.rb?我们是否假设我们已经创建了 3 个表?如果是这样,我如何通过种子预先定义类别?
    • 种子是预定义类别的好方法。是的,那会放在 User.rb 中。
    • 是的,假设表已创建并且关联也已正确设置。
    • 关联会是“用户通过...拥有许多类别”吗?既然用户可以有很多类别,那么一个类别也可以属于很多用户?
    • 这更像是一个主观决定。我假设用户 has_and_belongs_to_many 类别和类别 has_and_belongs_to_many 产品。不过,您可以通过多种方式使其发挥作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 2021-04-25
    • 2019-05-27
    • 1970-01-01
    • 2011-10-29
    相关资源
    最近更新 更多