2010-08-24 3 views
2

Я только начал использовать Mongoid на прошлой неделе. Я сталкиваюсь с этой проблемой ассоциации, и я не уверен, что мой подход верен. Так я думал, я хотел бы просить какое-то мнениекак сделать mongoid проекты <=has_many=> пользователей

У меня есть модель пользователя и модель проекта класса User включает Mongoid :: Document поля: адрес электронных конца класса Project включает Mongoid :: Документ поле: Имя конец

На самом деле пользовательская модель создана Devise, подлинным камнем, поэтому я думаю, что он не может быть встроен в Project.

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

Мой подход заключается в следующем: классе пользователь включает Mongoid :: Документ поле: электронная почта references_many: проекты referenced_in: проект: inverse_of =>: пользователи конца класса Project включает Mongoid :: Document поля : имя references_many: пользователи referenced_in: пользователь,: inverse_of =>: проекты конец

это правильный путь относительно архитектуры MongoDB сделать такой много-т o-many ассоциация?

Спасибо

ответ

1

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

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

+1

Эй, Мэтт, спасибо за ваш вклад. Это ценно, потому что это подтверждает: 1) я не сумасшедший, чтобы подозревать, что действительно нет хорошего способа сделать многого другого. --- Я просто, просто выкопал слайд Кайла Банкера здесь http://www.slideshare.net/kbanker/mongodb-the-way-and-its-power на 52-м слайде, он продемонстрировал, как сделать m -2-m-класс продукта, сохраняя категорию objectIds в product.in псевдоязыком, если вы хотите найти все продукты в категории: Product.find category_id = 123. но чтобы найти все категории в продукте, вам нужно начинать с категория class: Category.find (id в product.category.ids. –

+1

@Nik: Честно говоря, я, наверное, всего полтора месяца прошел, где вы сейчас, и только получил ответ так быстро, потому что это было не так долго назад Я искал ту же информацию ;-) Я бы очень рекомендовал посмотреть этот http://vimeo.com/9864311, мне очень помог. –

+0

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

5

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

+0

Ссылка сейчас находится здесь: http://mongoid.org/en/mongoid/docs/relations.html – tmaximini

+0

Спасибо, Фрэнк. Я обновил свой ответ. – nickh