OK,我不是一個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"] }
所以,你有什麼在這裏是非常簡單的。您有一個包含所有類別和子類別的集合。如果一個對象是一個「子類別」,它將會設置一個「父」字段。如果沒有「父」字段,那麼該對象是「類別」。
每個子類別都有一個「fields」元素。 「fields」實際上是一對數組。這將使其易於渲染。如果有人進入老式汽車,您可以查看「老式汽車」類別,然後在「字段」中循環顯示相應的輸入框。我使用了諸如「integer」和「boolean」之類的簡單的東西,但是你可以在這裏真正放入你想要的東西(「datepicker」,「checkbox」,...),這完全取決於你。
現在產品本身基本上存儲對類別和子類別的引用。它還會存儲您輸入的所有字段的值。
因此,該產品具有所需的所有數據,這將使每個產品都非常易於渲染。加載產品和適當的子類別,您將擁有動態呈現頁面所需的所有信息。
編輯
在答覆意見中,類別的 「場」 可以度量單位來構建:
..."fields" : [{"length","meters","float"},{"weight","kg","float"},...]
我不能發表評論不過,我想說我開始在Windows上使用mongodb和C#驅動程序,並且我熱愛面向文檔的數據庫,因爲模式是由數據推斷的 - 特別是我不需要定義st關係(即SQL)雖然都有自己的位置。並且mongo的JavaScript對象接口對鬆散類型的靈活性來說是一個真正的好處。 – 2010-06-24 03:56:25