我将在一个非常简单的例子中解释
客户提供产品。当他推动创造它给予形式。选择一个类别。一旦他选择了另一个表格就会弹出。
根据类别,表单应该具有完全不同的属性。我不能为每个类别提供Product.new。原因是它们具有不同的属性(Logicaly为true)。所以我必须为100个类别创建100个模型
类别包括:汽车,公寓,优惠券,书籍等等。
如果你只举一个例子,我将感激不尽,并称你为专家
答案 0 :(得分:1)
听起来你到了那里。但是,我不会像你在问题中指出的那样有一堆模型。我想说你需要一个产品模型和一个Category模型。类别模型将belong_to Product
。产品型号有很多类别。 Category模型可以使用acts_as_tree
gem,以便您可以拥有类别和子类别。使用javascript或jQuery(最近有一个Railscast)来根据所选内容动态地改变并发布一组不同的字段。
编辑:
我会有三个型号;产品,类别,规格
产品有很多类别 产品通过类别有许多规格
类别属于产品 类别有很多规格
规范属于Category
这样我就可以创建一个包含多个类别的产品。我可以创建几个具有多个规范的类别。规格与相应的类别相关联。这将允许您有三个模型和有限数量的类。项目完成后,Web管理员而不是程序员可以维护新的类别和规范。
答案 1 :(得分:0)
这不是你想要的答案,但你需要很多模型。
与公寓相关的属性(平方米,公用设施,建筑物楼层)与与汽车相关的属性(品牌,型号,里程,条件)完全不同,这些属性与书籍完全不同(标题,作者,出版商,版本等)。这些项目根本不同,没有办法在单一模型中管理它们。
话虽如此,可能存在可能与待售产品(卖家,价格,条款)相关联的核心属性集合。你基本上有两条前进道路:
您可以决定使用单表继承。在这种情况下,您将创建一个抽象类,用于定义您销售的所有产品(卖家,价格,商品)共有的属性。然后,您将向数据库添加一个“类型”列,用于确定它的产品类型(映射到您的类别),并在单个表中定义所有可能的属性。
您可以选择一组核心属性,并将这些属性用作任何其他被视为产品的对象的一部分。你有多个表可以拥有任何给定对象的完整记录。
如果不了解有关您的应用程序的大量细节,很难就哪种方法适合您做出具体建议。此时你最好的选择是花费大量时间在谷歌上使用“单表继承轨道”和“多表继承轨道”并找出哪一个适合你(虽然我的直觉说多表)。