Я только начинаю новый проект Rails 3, используя Mongoid ORM для MongoDB. Есть только одна вещь, которую я не могу понять, а именно, как эффективно иметь отношения многие ко многим. Теперь есть большая вероятность, что я могу неправильно подойти к этой проблеме, но, насколько я знаю, в моем проекте есть как минимум два контейнера, которые требуют отношения «многие ко многим». Я бы предпочел рассматривать обе модели как модели «первого класса» и выделять для каждой свой контейнер.
Это самый простой способ структурирования отношений «многие ко многим»:
// Javascript pseudo modeling
// -------------------- Apps
{
app: {
_id: "app1",
name: "A",
event_ids: ["event1","event2"]
}
}
{
app: {
_id: "app2",
name: "B",
event_ids: ["event1"]
}
}
// -------------------- Events
{
event: {
_id: "event1",
name: "Event 1",
}
}
{
event: {
_id: "event2",
name: "Event 2",
}
}
Насколько я могу судить, это минимальный объем информации, необходимый для вывода отношения «многие ко многим». Я предполагаю, что мне может потребоваться процедура уменьшения карты, чтобы определить, какие приложения относятся к событию. Мне также пришлось бы писать ловушки после фиксации / сохранения события, чтобы обновить App.event_ids, если приложение добавлено или удалено из модели события.
Я на правильном пути? Если у кого-нибудь есть примеры кода Mongoid или Mongomapper, в которых работают отношения «многие ко многим», не могли бы вы поделиться.