我有一个rails应用程序,目前使用activerecord来存储和查询产品。
每个产品都有一个类别和子类别,每个子类别都是由我可以在应用程序中创建的多个字段定义的。因此,当用户想要输入特定的产品时,他们会被按下相关的表单字段。
这变得非常复杂,自从听说mongodb和mongomapper以来,我想或者希望我从一开始就使用mongomapper创建了它!
问题是,我想知道在mongodb中对此应用程序建模的最佳方式?
我在考虑建立一个具有公共字段的procuct模型,然后让类别模型继承产品模型中的不同字段。
这听起来对吗?
还有一个问题是,我希望用户能够在应用程序中创建自己的类别和字段。例如,当用户创建一个带有速度和车门数量等字段的汽车类别时,我如何才能做到这一点。然后,我需要能够使用这些字段为将来输入的汽车创建一个表单。
任何想法,指针或任何人都可以帮助我的例子将是伟大的。
先谢谢你,瑞克
发布于 2010-06-24 11:52:33
好吧,我不是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"] }所以这里的代码非常简单。您有一个包含所有类别和子类别的集合。如果一个对象是一个“子类别”,它将有一个“父”字段设置。如果没有"parent“字段,则该对象是"Category”。
每个子类别都有一个“field”元素。“field”实际上是一个配对数组。这将使渲染变得容易。如果有人输入一辆老式汽车,您可以查找“老式汽车”类别,然后遍历“字段”以呈现相应的输入框。我使用了像“整数”和“布尔值”这样简单的东西,但你真的可以在这里放任何你想要的东西(“日期选择器”,“复选框”,...)一切都看你的了。
现在,产品本身基本上存储了对Category和Sub-category的引用。它还存储您输入的所有字段的值。
因此,Product拥有它所需的所有数据,这应该会使每个产品非常容易呈现。加载Product和适当的Sub-Category,您将拥有动态呈现页面所需的所有信息。
编辑
作为对评论的回复,Category中的“field”可以使用度量单位来构建:
..."fields" : [{"length","meters","float"},{"weight","kg","float"},...]
https://stackoverflow.com/questions/3097842
复制相似问题