好的,我不是 Ruby/Mongomapper 专家,所以我无法将其映射到“模型”中。但是,如果您从 Mongo 的角度来看,这就是您可能希望数据在 Mongo 中的显示方式。
集合: 类别
{"_id" : "car"}
{"_id" : "vintage_car", "parent" : "car", "fields" : ["year" : "integer", "original_parts" : "boolean", "upgrades" : "text"] }
系列:产品
{"_id" : "1234", "name" : "Model-T", "category" : "car", "sub-category" : "vintage_car", "values" : ["year" : 1942, "original_parts" : false, "upgrades : "XM Radio"] }
所以你在这里所拥有的非常简单。您有一个包含所有类别和子类别的集合。如果一个对象是一个“子类别”,它将有一个“父”字段集。如果没有“父”字段,则该对象是“类别”。
每个子类别都有一个“字段”元素。“字段”实际上是一对数组。这将使渲染变得容易。如果有人输入一辆老爷车,您查找“老爷车”类别,然后循环遍历“字段”以呈现相应的输入框。我使用了像“integer”和“boolean”这样的简单的东西,但是你真的可以在这里放任何你想要的东西(“datepicker”,“checkbox”,...)这完全取决于你。
现在产品本身基本上存储了对 Category 和 Sub-category 的引用。它还存储您输入的所有字段的值。
所以产品拥有它需要的所有数据,这应该使每个产品都非常容易呈现。加载产品和适当的子类别,您将获得动态呈现页面所需的所有信息。
编辑
在回复评论时,Category中的“字段”可以使用度量单位构建:
..."fields" : [{"length","meters","float"},{"weight","kg","float"},...]