Сложное редактирование хешей с помощью MVC / Padrino ruby ​​1.8.x - PullRequest
0 голосов
/ 24 июня 2010

Я новичок в MVC. Я использую Padrino с MongoMapper и Haml, чтобы попытаться создать это приложение.

У меня есть база данных элементов, с каждым из которых связан хеш, называемый «params». Этот хеш имеет некоторые обязательные ключи, но в основном произвольные / случайные ключи. Некоторые из ключей имеют конечный набор допустимых значений.

Например:

item.params ["password"] НЕ имеет конечного набора возможных значений.

item.params ["color"] должен быть одним из% w {красный синий зеленый}

Какой лучший способ создать редактор для элементов в этом хэше? Я хотел бы текстовое поле для значений в свободной форме и меню для конечных значений. Мне бы также хотелось, чтобы в этих меню в качестве нижнего варианта было выбрано «Создать новый», поэтому я не могу просто жестко закодировать все наборы конечных значений.

Лучшее, что я могу придумать для этого, - это иметь новую коллекцию (таблицу) в БД, которая является просто хешем значений по умолчанию. Если ваш ключ отсутствует в этом хэше, вы получите текстовое поле.

Похоже, что должен быть лучший путь.

1 Ответ

1 голос
/ 25 июня 2010

Ваши вопросы очень похожи на этот: mongodb и mongomapper

Я думаю, что вы, вероятно, захотите создать коллекцию "типов" с "единицами измерения"... так что ваша коллекция типов будет иметь такие записи:

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

Итак, очевидно, что логика рендеринга всего этого должна быть на стороне Ruby.Однако, попробовав этот материал в RDBM, это определенно будет легче.

Да, слабость здесь в том, что вы можете в конечном итоге запросить коллекцию «types» один раз для каждого поля.Итак, если вы показываете 10 полей, вы делаете 10 запросов.Это может звучать немного неубедительно, но это в основном то, что ваша база данных MySQL делает в любом случае.Вы, вероятно, захотите создать слой «кэширования» для коллекции «types», так как вы, вероятно, захотите, чтобы он постоянно «в памяти».

...