mongodb и mongomapper - PullRequest
       4

mongodb и mongomapper

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

У меня есть приложение rails, которое в настоящее время использует activerecord для хранения и запроса продуктов.

Каждый продукт имеет категорию и подкатегорию, и каждая подкатегория определяется несколькими полями, которые я могу создать в приложении. Исходя из этого, когда пользователь хочет ввести определенный продукт, ему присваиваются соответствующие поля формы.

Это стало очень сложным, и с тех пор, как я услышал о mongodb и mongomapper, я думаю или хотел бы создать его с самого начала, используя mongomapper !!!

Проблема в том, что я хочу узнать, как лучше всего смоделировать это приложение в mongodb ???

Я думал о том, чтобы иметь модель с общими полями и затем модели категорий, наследуемые от модели продукта с различными полями в.

Это звучит правильно?

Проблема в том, что я хочу, чтобы пользователь мог создавать свои собственные категории и поля внутри приложения. Как я могу это сделать, например, когда пользователь, например, создает категорию автомобилей с полями, такими как скорость и количество дверей и т. Д. Затем мне нужно иметь возможность создать форму с использованием этих полей для ввода будущих автомобилей.

Любые идеи, указатели или примеры, с которыми кто-нибудь может мне помочь, были бы великолепны.

Большое спасибо заранее рик

1 Ответ

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

ОК, я не эксперт по Ruby / Mongomapper, поэтому я не смогу сопоставить это с "моделями".Однако, если вы посмотрите на это с точки зрения Монго, вот, как вы, вероятно, хотите, чтобы данные выглядели в Монго.

Коллекция: Категория

{"_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"] }

Так что у вас здесь все довольно просто.У вас есть одна коллекция, которая содержит все категории и подкатегории.Если объект является «Подкатегорией», он будет иметь установленное поле «родитель».Если родительского поля нет, тогда этот объект является «категорией».

Каждая подкатегория имеет элемент «поля».«Поля» на самом деле массив пар.Это облегчит рендеринг.Если кто-то входит в старинный автомобиль, вы просматриваете категорию «старинный автомобиль» и затем просматриваете «поля», чтобы отобразить соответствующие поля ввода.Я использовал простые вещи, такие как «integer» и «boolean», но вы действительно можете поместить здесь все, что вы хотите («datepicker», «checkbox», ...), все зависит от вас.

ТеперьСам продукт в основном хранит ссылку как на категорию, так и на подкатегорию.В нем также хранятся значения для всех полей, которые вы ввели.

Таким образом, у продукта есть все необходимые данные, что должно облегчить рендеринг каждого продукта.Загрузите продукт и соответствующую подкатегорию, и вы получите всю необходимую информацию для динамического отображения страницы.

РЕДАКТИРОВАТЬ

В ответ на комментарий «поля» в категории могут быть построены с единицей измерения:

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

...