Реализуете полиморфные отношения «многие ко многим» с Mongoid? - PullRequest
2 голосов
/ 01 ноября 2011

Как реализовать отношение «многие ко многим» в Mongoid? Например, у нас есть Пользователь , который может иметь множество Уведомлений , а Уведомление является родительским классом для SpecificNotification . Каждый Пользователь может получать оповещения на N Уведомления (что означает Уведомления , SpecificNotifications ) и каждый Уведомление (означающее и то и другое) может применяться к N Пользователям .

Я попробовал следующее:

в user.rb:

class User
  include Mongoid::Document
  has_and_belongs_to_many :notifications
  attr_accessible :notifications, :notification_ids
end

в уведомлении. Rb:

class Notification
  include Mongoid::Document
  has_and_belongs_to_many :users
  attr_accessible :users, :user_ids
end

в specificnotification.rb:

class SpecificNotification < Notification
  field :something_specific
end

Но когда я создаю SpecificNotification , связанные Пользователи не обновляются - Пользователи будут записывать только Уведомления , а не SpecificNotifications . Что не так?

1 Ответ

0 голосов
/ 22 марта 2013

Это не прямой ответ на вашу проблему, но вот мои 2 цента :

Я бы предложил подумать о денормализации вашей модели данных. В моей социальной сети у меня была довольно похожая проблема: у пользователей много уведомлений, и одно и то же уведомление будет распространяться на многих пользователей.

Но вместо того, чтобы делать отношения многие ко многим, я перешел на стиль noSQL и повторил уведомление для каждого пользователя . Таким образом, было проще настроить уведомления с именем каждого пользователя и другими атрибутами. Я думаю, что это был бы "правильный способ" моделировать его с помощью mongodb.

То же самое относится и к этому конкретному полю, так как вы используете mongoid, некоторые объекты могут иметь, а могут и не иметь некоторые поля. Если не так много типов уведомлений с большим количеством полей, возможно, было бы лучше просто поместить это поле в модель уведомлений.

...