假设每个产品都有一个类别。我想让用户选择用户感兴趣的几个类别,并找到具有相同类别的产品。这类似于Quora,Stumbleupon和Pinterest所做的一切。
在Rails中设置此数据库结构的最佳方法是什么?我应该创建3个表:用户,产品和类别,并建立关系 用户有很多类别&产品有很多类别?
我看到的问题是,它不会为用户和产品的每一行创建而不是引用类别的新实例吗?
*额外:如果我想要子类别怎么办?例如,如果用户选择了技术,则可以进一步要求在web开发,移动设备,硬件等之间进行选择。
答案 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子句,过滤掉当前用户产品列表中包含产品的所有行。
协会不是问题。只有当您编写自己创建新实例的代码时,它们才会自行创建任何新实例。
至于子类别,我认为你做得更好是因为它本身很容易成为一个完整的帖子。