Ruby 使用Mongoid实现多态多对多关系?

Ruby 使用Mongoid实现多态多对多关系?,ruby,mongoid,Ruby,Mongoid,如何在Mongoid中实现多对多关系?例如,我们有一个用户,它可以有许多通知,而通知是SpecificNotification的父类。可以向每个用户发出N个通知的警报,这意味着通知和特定通知,每个通知都意味着两者,同样可以应用于N个用户 我尝试了以下方法: 在user.rb中: 在notification.rb中: 在specificnotification.rb中: 但是当我创建一个SpecificNotification时,相关用户不会被更新——用户只会记录通知,而不会记录SpecificN

如何在Mongoid中实现多对多关系?例如,我们有一个用户,它可以有许多通知,而通知是SpecificNotification的父类。可以向每个用户发出N个通知的警报,这意味着通知和特定通知,每个通知都意味着两者,同样可以应用于N个用户

我尝试了以下方法:

在user.rb中: 在notification.rb中: 在specificnotification.rb中:
但是当我创建一个SpecificNotification时,相关用户不会被更新——用户只会记录通知,而不会记录SpecificNotification。怎么了?

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

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

但我没有进行多对多关系,而是采用了noSQL风格,并在每个用户上复制了通知。通过这种方式,还可以更轻松地使用每个用户名和其他属性自定义通知。我认为这是用mongodb建模的正确方法


对于这个特定字段也是如此,因为您正在使用mongoid,一些对象可能有一些字段,也可能没有。如果没有很多类型的通知包含很多字段,那么最好将该字段放在通知模型中

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

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

但我没有进行多对多关系,而是采用了noSQL风格,并在每个用户上复制了通知。通过这种方式,还可以更轻松地使用每个用户名和其他属性自定义通知。我认为这是用mongodb建模的正确方法

对于这个特定字段也是如此,因为您正在使用mongoid,一些对象可能有一些字段,也可能没有。如果没有很多类型的通知包含很多字段,那么最好将该字段放在通知模型中

class User
  include Mongoid::Document
  has_and_belongs_to_many :notifications
  attr_accessible :notifications, :notification_ids
end
class Notification
  include Mongoid::Document
  has_and_belongs_to_many :users
  attr_accessible :users, :user_ids
end
class SpecificNotification < Notification
  field :something_specific
end