用于相当简单的通知系统的Rails关联

时间:2013-11-12 10:38:13

标签: ruby-on-rails database-design mongoid associations modeling

我正在尝试在Rails中设置一个通知系统,以及mongoid(但我不认为这是特定的mongoid)。

基本结构是这样的 - 每个通知都有一个通知程序(负责通知的人)和一个通知(接收通知的人)。当用户A对用户B的帖子进行评论时(例如在博客系统中),用户A成为通知者,用户B成为通知者。

User.rb

# nothing in here

notification.rb里

has_one :notifier, :class_name => "User"
belongs_to :notifiee, :class_name => "User"

然而,当我这样做时:

@notification = Notification.new
@notification.notifier = current_user
@notification.notifiee = User.first #Just for the sake of the example
@notification.save

我收到此错误:

  

问题:将(n)用户添加到通知#通知程序时,Mongoid可以   不确定要设置的反向外键。尝试过的关键是   'notifiee_id'.Summary:在关系中添加文档时,Mongoid   尝试将新添加的文档链接到关系的基础   在内存中,以及设置外键以在数据库上链接它们   侧。在这种情况下,Mongoid无法确定反向是什么   外键是。分辨率:如果不需要反转,就像一个   belongs_to或has_and_belongs_to_many,确保:inverse_of =>零   在关系上设置。如果需要逆,很可能是   无法从你和你的关系名称中找出逆   将需要明确告诉Mongoid关于什么是逆的关系   是

我可能做错了什么?或者,有没有更好的方法来模拟这个??

非常感谢任何帮助!谢谢。

1 个答案:

答案 0 :(得分:3)

您应该选择以下协会:

用户:

has_many :notifications_as_notifier, :class_name=>'Notification', :foreign_key=>'notifier_id'
has_many :notifications_as_notifiee, :class_name=>'Notification', :foreign_key=>'notifiee_id'

通知:

belongs_to :notifier, :class_name=>'User', :foreign_key=>'notifier_id'
belongs_to :notifiee, :class_name=>'User', :foreign_key=>'notifiee_id'

您的notifications表格应该有notifier_idnotifiee_id

现在你可以做到,

@notification = Notification.new
@notification.notifier = current_user
@notification.notifiee = User.first #Just for the sake of the example
@notification.save

我在您的设置中发现了一些问题:

你有,

has_one :notifier, :class_name => "User"
belongs_to :notifiee, :class_name => "User"

当您使用has_on时,其他关系(表)必须具有引用父项的外键。此处users必须包含列notification_id或其他内容。这是不切实际的,因为单个用户有很多通知(基于您的解释)。

其次,您通过两个关系将通知与用户关联,但您提到了有关用于强制关联的外键的任何信息。

为什么在User模型中没有反比关系?如果您可以访问类似的内容,那会无济于事:current_user.notifications_as_notifier ??