与Mongoid实现多态多对多关系?

时间:2011-10-31 20:35:13

标签: ruby mongoid

如何在Mongoid中实现多对多关系?例如,我们有一个用户,可以有多个通知通知 SpecificNotification 的父类。每个用户都可以收到 N 通知的警报(意味着通知特定通知)每个通知(再次表示两者)都可以适用于 N 用户

我尝试了以下内容:

user.rb中的

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

在notification.rb中:

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

in specificnotification.rb:

class SpecificNotification < Notification
  field :something_specific
end

但是,当我创建 SpecificNotification 时,相关的用户不会更新 - 用户只会记录通知,而不是 SpecificNotifications 。怎么了?

1 个答案:

答案 0 :(得分:0)

这不是你问题的直接答案,但这里我的2美分

我建议您考虑非规范化您的数据模型。在我所拥有的社交网络上,我遇到了一个相当类似的问题:用户有很多通知,而且很多用户会收到同样的通知。

但是我没有做多对多关系,而是采用了noSQL风格,并且复制了每个用户的通知。这样,使用每个用户的名称和其他属性更容易自定义通知。我认为这将是使用mongodb进行建模的“正确方法”。

对于此特定字段也是如此,因为您使用的是mongoid,某些对象可能也可能没有某些字段。如果没有很多类型的通知包含大量字段,那么将该字段放在Notification模型上可能会更好。