2010-06-22 7 views
1

J'ai une application rails qui utilise actuellement activerecord pour stocker et interroger des produits. Chaque produit a une catégorie et une sous-catégorie et chaque sous-catégorie est définie par plusieurs champs que je peux créer dans l'application. A partir de là, lorsqu'un utilisateur souhaite entrer un produit spécifique, il est pressenti avec les champs de formulaire correspondants.mongodb et mongomapper

Ceci est devenu très complexe et après avoir entendu parler de mongodb et mongomapper, je pense ou souhaite que je l'ai créé dès le début en utilisant mongomapper !!!

Problème est que je veux connaître la meilleure façon de modéliser cette application dans mongodb ???

Je pensais avoir un modèle procuct avec des champs communs et ayant des modèles de catégorie héritant de modèle de produit avec les différents domaines.

Est-ce son correct?

Le problème est aussi que je veux que l'utilisateur puisse créer sa propre catégorie et champs à partir de l'application. Comment puis-je faire cela comme lorsqu'un utilisateur crée par exemple une catégorie de voitures avec des champs comme la vitesse et le nombre de portes, etc. Je dois alors pouvoir créer un formulaire en utilisant ces champs pour les futures voitures à entrer. Toutes les idées, les pointeurs ou les exemples que n'importe qui peut m'aider serait génial.

Merci beaucoup à l'avance rick

+0

Je ne peux pas commenter Ruby mais je voudrais dire que je commencé à utiliser MongoDB sous Windows avec un pilote C# et je suis amoureuse de la base de données orientée-documement parce que le schéma est déduit par les données - en particulier, j'aime ne pas avoir à définir st relations rictales (c.-à-d. SQL) bien que les deux aient leur place. Et l'interface d'objet JavaScript de mongo est un vrai bonus pour une flexibilité vaguement typée. –

Répondre

1

OK, je ne suis pas un expert Ruby/mongomapper, je ne vais pas être en mesure de la carte dans ce « modèles ». Cependant, si vous regardez ceci du point de vue de Mongo, voici comment vous voulez probablement que les données regardent dans Mongo.

Collection:Catégorie

{"_id" : "car"} 
{"_id" : "vintage_car", "parent" : "car", "fields" : ["year" : "integer", "original_parts" : "boolean", "upgrades" : "text"] } 

Collection: Produits

{"_id" : "1234", "name" : "Model-T", "category" : "car", "sub-category" : "vintage_car", "values" : ["year" : 1942, "original_parts" : false, "upgrades : "XM Radio"] } 

donc ce que vous avez ici est assez simple. Vous avez une collection qui contient toutes les catégories et sous-catégories. Si un objet est une "sous-catégorie", il aura un champ "parent". S'il n'y a pas de champ "parent", alors cet objet est une "Catégorie".

Chaque sous-catégorie a un élément "champs". "fields" est en fait un tableau de paires. Cela rendra le rendu facile. Si quelqu'un entre dans une voiture de collection, vous recherchez la catégorie «voiture ancienne», puis parcourez les «champs» pour afficher les zones de saisie appropriées. J'ai utilisé des choses simples comme "integer" et "boolean", mais vous pouvez vraiment mettre tout ce que vous voulez ici ("datepicker", "checkbox", ...) tout dépend de vous.

Maintenant, le produit lui-même contient essentiellement une référence à la fois à la catégorie et à la sous-catégorie. Il stocke également les valeurs de tous les champs que vous avez saisis.

Ainsi, le produit possède toutes les données dont il a besoin, ce qui devrait rendre chaque produit très facile à afficher. Chargez le produit et la sous-catégorie appropriée et vous aurez toutes les informations dont vous avez besoin pour rendre la page dynamiquement.

EDIT

En réponse au commentaire, les "champs" dans Catégorie peut être construit avec une unité de mesure:

..."fields" : [{"length","meters","float"},{"weight","kg","float"},...]

+0

remercie Gates VP pour votre aide. Je dois également stocker les unités pour chaque champ ie la longueur de la voiture est mm, poids de la voiture est kg et revs = rpm etc Une idée de comment intégrer cela dans votre solution? merci beaucoup rick –

+0

Il suffit de modifier la collection "Catégorie". J'ai fait des "champs" dans un tableau de "paires" (valeur-clé). Cependant, vous pouvez en faire un tableau d'objets. J'ai mis à jour la réponse avec ceci en bas. –

Questions connexes