2010-06-22 59 views
1

我有一個rails應用程序,目前使用activerecord來存儲和查詢產品。mongodb和mongomapper

每個產品都有一個類別和子類別,每個子類別都由我可以在應用程序內創建的多個字段定義。從用戶想要輸入特定產品時,他們會顯示相關的表單字段。

這已經變得非常複雜,自從聽說mongodb和mongomapper之後,我想或者希望我從一開始就使用mongomapper創建它!

問題是我想知道在mongodb中建模這個應用程序的最佳方式?

我在想有共同字段目前產品模型,然後有分類模型從產品型號的不同領域中繼承。

這聽起來是否正確?

問題是,我希望用戶能夠在應用程序內創建自己的類別和字段。我怎麼能這樣做,因爲當一個用戶例如創建一個汽車類別,如速度和門的數量等領域,我需要能夠創建一個使用這些領域的未來汽車輸入的形式。

任何人都可以幫助我的想法,指針或例子會很棒。

非常感謝提前 裏克

+0

我不能發表評論不過,我想說我開始在Windows上使用mongodb和C#驅動程序,並且我熱愛面向文檔的數據庫,因爲模式是由數據推斷的 - 特別是我不需要定義st關係(即SQL)雖然都有自己的位置。並且mongo的JavaScript對象接口對鬆散類型的靈活性來說是一個真正的好處。 – 2010-06-24 03:56:25

回答

1

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"},...]

+0

感謝蓋茨副總裁的幫助。 我還需要存儲每個領域的單位,即汽車長度是毫米,汽車重量是千克和轉速=轉速等 任何想法如何將它融入您的解決方案? 非常感謝 rick – 2010-06-24 09:04:19

+0

只需修改「類別」集合即可。我將「字段」製作爲「對」(鍵值)的數組。但是,您可以將其製作爲一組對象。我在底部更新了這個回覆。 – 2010-06-25 01:51:33

相關問題