我有一个带有用户模型的Rails 3.2应用程序。我想添加一个可以由以下用例触发的通知机制:
在所有情况下,一个用户根据其他用户将收到的行为生成通知。因此,有一个发件人和收件人通知。
我现在正在思考如何构建我的关联。到目前为止,我的模型如下所示:
notification.rb里
attr_accessible :content, :read_at, :recipient_id, :sender_id
belongs_to :sender, class: :user
belongs_to :recipient, class: :user
User.rb
has_many :notifications, as: :recipient, dependent: :destroy, foreign_key: :recipient_id
has_many :notifications, as: :sender, dependent: :destroy, foreign_key: :sender_id
这个伪代码只能帮助理解我需要什么 - 让我感到困惑的是我在通知模型中两次引用用户模型,并且用户有两种不同的通知方式。
所以,我的问题是:
谢谢!
要将Shane的解决方案用于文字,这就是模型必须具有的外观。这比我想象的要容易得多。我以为我必须在这里做一些魔术 - 但是Rails以其惊人的简洁性再次欺骗了我!嗯,这就是我非常喜欢它的原因。
非常感谢,Shane!
notification.rb里
attr_accessible :content, :read_at, :recipient, :recipient_id, :sender, :sender_id
belongs_to :sender, class_name: "User"
belongs_to :recipient, class_name: "User"
User.rb
has_many :received_notifications, class_name: "Notification", foreign_key: "recipient_id", dependent: :destroy
has_many :sent_notifications, class_name: "Notification", foreign_key: "sender_id", dependent: :destroy
答案 0 :(得分:3)
这是完全正常的。下面是一个流行的开源应用程序Redmine中使用的相同模式的示例:
https://github.com/edavis10/redmine/blob/master/app/models/workflow_rule.rb#L23-L24
至于需要一种同时收到发送和接收通知的方法,这里的答案很适合基本需求。