为了练习,我正在写一个购物网站,我们有桌子User
和Item
. 一个用户显然是has_many
物品(当他们被添加到他们的购物篮中时),但是即使许多用户在他们的购物篮中都有相同的物品,它belongs_to
也是如此?User
此外,如果我想要一个用户添加到他们的购物篮的项目列表,以及他们查看过的项目列表(用于根据搜索提出建议),最好有一些“通过”表:Basket
和Viewed
?
为了练习,我正在写一个购物网站,我们有桌子User
和Item
. 一个用户显然是has_many
物品(当他们被添加到他们的购物篮中时),但是即使许多用户在他们的购物篮中都有相同的物品,它belongs_to
也是如此?User
此外,如果我想要一个用户添加到他们的购物篮的项目列表,以及他们查看过的项目列表(用于根据搜索提出建议),最好有一些“通过”表:Basket
和Viewed
?
当您有这种多对多关系时,您可以使用 HABTM 模式:
Class User...
has_and_belongs_to_many :items
然而,大多数时候网上商店使用订单来跟上用户购买的物品。这意味着一个 'user' 'has_many' 'orderlines' ,一个 'item' 'has_many' 'orderlines' ,一个 'orderline' 'belongs_to' 一个 'user' 和一个 'item'。
也许您的订单只是项目的副本,并且没有直接链接,因为您不想在处理完订单后更改它们。这实际上取决于您商店的重点,哪种方案适合您的需求。
试着在网上找一些例子,想想你想如何处理物品、订单和购物篮。
我习惯于把不一样的东西分开,即使关系是一对一的。所以首先我会推荐来自购物篮的用户(1:1 关系)。
之后,一个篮子包含许多项目,项目可以在多个篮子中(m:n 关系)。确保,也许用户喜欢多次购买同一物品。
视图可以实现为用户和项目之间的链接表:用户有很多视图,项目有很多视图,但一个视图总是链接到一个用户和一个项目。