0

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

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

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

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

4

1 回答 1

2

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

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

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

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

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

于 2012-12-31T21:21:46.467 回答