Ruby on Rails 3 - 使用许多类别/属性对产品进行建模

时间:2011-03-30 20:06:41

标签: ruby-on-rails-3 design-patterns model

我正在开发我的第一个Rails网站,一个购物网站:有通过网站销售的产品,每个产品都有多个独特的属性。

我想象的用例是:用户访问网站寻找买旧床,他们点击几个更高的类别,直到他们找到一个正确大小的床,如下所示:

Furniture
---> Couch
---> Dresser
---> Bed
-------> Size
----------> King
----------> Queen
...

每次用户点击一个更窄的类别时,都会提供一个菜单,其中包含下一个细节级别(一个NewEgg)。单击“家具”时,将显示所有家具,并显示包含家具类型的菜单。单击“床”时,将显示所有床位,并显示显示床的各种属性的菜单等。

到目前为止,我有一个“Item”父类,其中包含通过网站销售的每件商品的所有属性(价格,描述等)。我坚持下一步该做什么。

我的第一直觉是拥有子类,但它们似乎没那么有用。除了将它定义为家具之外,“家具”子类中没有任何东西可以有任何新东西。此外,每个父类都需要知道它的子类。

我应该采用什么样的设计模式来干净地实施这个模型?我一直在研究嵌套集,但我不完全确定这是要走的路。任何指导都表示赞赏。

谢谢!

1 个答案:

答案 0 :(得分:4)

您的类别明确地形成了一个树,这可能是您考虑类继承树的原因。但是,您认为这不是正确的模型是正确的,因为子类不会在其父项上添加任何功能

您应该有一个“Item”类,它是类别树中的一个节点 - 引用其父类别(另一个“Item”,或根目录为null)及其子数组(所有“Item”)或多个)。

存储树结构信息的正确位置是数据库。在items表中,将“parent_id”列作为外键添加到items表中。

当用户在树中向下导航时,您可以通过查询parent_id等于当前项目ID的项目来显示子类别。