как управлять пользователями <= has_many => пользователей - PullRequest
2 голосов
/ 24 августа 2010

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

У меня есть модель пользователя и модель проекта Класс пользователя включить Mongoid :: Document поле: электронная почта конец Проект класса включить Mongoid :: Document поле: имя конец

На самом деле пользовательская модель создается Devise, гемом аутентификации, поэтому, я думаю, ее нельзя встроить в Project.

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

Мой подход такой: Класс пользователя включить Mongoid :: Document поле: электронная почта reference_many: проекты referenced_in: project,: inverse_of =>: пользователи конец Проект класса включить Mongoid :: Document поле: имя reference_many: пользователи referenced_in: пользователь,: inverse_of =>: проекты конец

Является ли это правильным способом в отношении архитектуры MongoDB для создания такой связи многие-ко-многим?

Спасибо

Ответы [ 2 ]

5 голосов
/ 05 ноября 2010

В документации Mongoid объясняется, как это сделать на http://mongoid.org/en/mongoid/docs/relations.html#has_and_belongs_to_many.Прокрутите вниз до заголовка Реляционные ассоциации .В приведенном примере кода между моделями Person и Preference существует отношение «многие ко многим».

1 голос
/ 24 августа 2010
1000 баз данных документов на самом деле довольно ужасны, когда дело касается многих ко многим, поскольку в этом и заключается сущность реляционных данных. Монго светит, когда данные иерархические, а не реляционные.

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

...