根据兴趣向用户推荐产品的最佳方式?

时间:2012-12-31 21:12:47

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

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

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

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

*额外:如果我想要子类别怎么办?例如,如果用户选择了技术,则可以进一步要求在web开发,移动设备,硬件等之间进行选择。

1 个答案:

答案 0 :(得分:2)

你可以很容易地做那种'推荐'。

这样的事情应该有效(N.B。:我没有测试这段代码,但它在精神上是正确的):

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子句,过滤掉当前用户产品列表中包含产品的所有行。

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

至于子类别,我认为你做得更好是因为它本身很容易成为一个完整的帖子。