OK, nejsem expert na Ruby/Mongomapper, takže to nebudu moci zmapovat do „modelů“. Pokud se na to však podíváte z pohledu Monga, takto pravděpodobně chcete, aby data vypadala v Mongo.
Sbírka: Kategorie
{"_id" : "car"}
{"_id" : "vintage_car", "parent" : "car", "fields" : ["year" : "integer", "original_parts" : "boolean", "upgrades" : "text"] }
Sbírka :Produkty
{"_id" : "1234", "name" : "Model-T", "category" : "car", "sub-category" : "vintage_car", "values" : ["year" : 1942, "original_parts" : false, "upgrades : "XM Radio"] }
Takže to, co tu máte, je docela jednoduché. Máte jednu kolekci, která obsahuje všechny kategorie a podkategorie. Pokud je objekt "podkategorií", bude mít sadu polí "rodič". Pokud neexistuje žádné „nadřazené“ pole, pak je tento objekt „Kategorie“.
Každá podkategorie má prvek „pole“. "pole" je ve skutečnosti pole párů. To usnadní vykreslování. Pokud někdo vstoupí do veterána, vyhledáte kategorii „vintage car“ a poté procházíte „pole“, abyste zobrazili příslušná vstupní pole. Použil jsem jednoduché věci jako "integer" a "boolean", ale můžete si sem dát opravdu co chcete ("datepicker", "checkbox", ...), je to jen na vás.
Nyní samotný produkt v podstatě ukládá odkaz na kategorii i podkategorii. Také ukládá hodnoty pro všechna pole, která jste zadali.
Produkt má tedy všechna data, která potřebuje, což by mělo usnadnit renderování každého produktu. Načtěte produkt a příslušnou podkategorii a budete mít všechny informace, které potřebujete k dynamickému vykreslení stránky.
UPRAVIT
V odpovědi na komentář „pole“ v Kategorii lze postavit s měrnou jednotkou:
..."fields" : [{"length","meters","float"},{"weight","kg","float"},...]