2010-06-24 13 views
0

Je suis nouveau sur MVC. J'utilise Padrino avec MongoMapper et Haml pour essayer de créer cette application.Édition de hachage complexe avec MVC/Padrino ruby ​​1.8.x

J'ai une base de données d'éléments, dont chacun est associé à un hachage appelé 'params'. Ce hash a quelques clés requises, mais la plupart du temps des clés arbitraires/aléatoires. Certaines clés ont un ensemble fini de valeurs admissibles.

Par exemple:

item.params [ "mot de passe"] ne dispose pas d'un ensemble fini de valeurs possibles.

item.params [ « couleur »] doit être l'une de% {w bleu vert rouge}

Quelle est la meilleure façon de créer un éditeur pour les éléments de ce hachage? Je voudrais un champ de texte pour les valeurs de forme libre et les menus pour les valeurs finies. Je voudrais aussi que ces menus aient "Create New" comme choix de base, donc je ne peux pas simplement coder en dur tous les ensembles de valeurs finies.

La meilleure chose que je peux faire pour cela est d'avoir une nouvelle collection (table) dans la base de données qui est juste un Hash de valeurs par défaut. Si votre clé n'est pas dans ce hachage, vous obtenez une zone de texte.

On dirait qu'il doit y avoir un meilleur moyen cependant.

Répondre

1

Vos questions semble tout à fait semblable à celui-ci: mongodb and mongomapper

Je pense que vous aurez probablement envie de construire une collection de « types » avec la collection « unités de mesure » ... de sorte que votre « types » serait avoir des entrées comme ceci:

{"_id" : "password", "display" : "password"} 
{"_id" : "user_name", "display" : "text", "restrictions" : ["max_length": 20]} 
{"_id" : "eye_color", "display" : ["red","blue","green"], "restrictions" : ["single"]} 

Alors évidemment, la logique pour rendre ce genre de choses doit être sur le côté Ruby. Cependant, après avoir essayé ce genre de choses dans les RDBM, cela va certainement être plus facile.

Oui, la faiblesse ici est que vous pourriez finir par interroger la collection "types" une fois pour chaque champ. Donc, si vous montrez 10 champs, vous faites 10 requêtes. Cela peut sembler un peu boiteux, mais c'est essentiellement ce que fait votre base de données MySQL de toute façon. Vous voudrez probablement créer un calque de "mise en cache" pour la collection "types" car vous le voudrez probablement "en mémoire" de façon permanente.