ruby-on-rails – 通知ala Facebook(数据库实施)

ruby-on-rails – 通知ala Facebook(数据库实施),第1张

概述我想知道Facebook如何实现他们的通知系统,因为我正在寻找类似的东西. > FooBar评论了你的状态 > Red1,Green2和Blue3对你的照片发表了评论 > MegaMan和另外5人对您的活动发表了评论 我不能将多个通知写入单个记录,因为最终我将有与每个通知相关联的 *** 作.此外,在视图中,我希望当单个主题存在一定数量的通知时,通知将呈现为可扩展列表. > FooBar评论了你的状态(行 我想知道Facebook如何实现他们的通知系统,因为我正在寻找类似的东西.

> Foobar评论了你的状态
> Red1,Green2和Blue3对你的照片发表了评论
> MegaMan和另外5人对您的活动发表了评论

我不能将多个通知写入单个记录,因为最终我将有与每个通知相关联的 *** 作.此外,在视图中,我希望当单个主题存在一定数量的通知时,通知将呈现为可扩展列表.

> Foobar评论了你的状态(行动)
> Red1,Green2和Pink5对你的照片[]发表了评论
> MegaMan和另外3人对您的活动发表了评论[ – ]

> MegaMan评论了您的活动(行动)
> ProtoMan评论了你的活动(行动)
> Bass评论了你的活动(行动)
> DrWilly评论了您的活动(行动)

干杯!

PS我正在使用postgres和rails BTW.

解决方法 有很多方法可以实现这一点.这实际上取决于您想要涵盖哪些类型的通知以及您需要收集哪些有关通知的信息,以便将其显示给正确的用户.如果您正在寻找一个简单的设计,只包含有关已发布评论的通知,您可以使用 polymorphic associations和 observer callbacks的组合:

class Photo < ActiveRecord::Base# or Status or Event    has_many :comments,:as => :commentableendclass Comment < ActiveRecord::Base    belongs_to :commenter    belongs_to :commentable,:polymorphic => true # the photo,status or eventendclass CommentNotification < ActiveRecord::Base    belongs_to :comment    belongs_to :target_userendclass CommentObserver < ActiveRecord::Observer    observe :comment    def after_create(comment)        ...        CommentNotification.create!(comment_ID: comment.ID,target_user_ID: comment.commentable.owner.ID)        ...    endend

这里发生的事情是每张照片,状态,事件等都有很多评论.注释显然属于:commenter,但也属于:commentable,可以是照片,事件或任何其他您想要允许注释的模型.然后,您有一个CommentObserver,它将观察您的Comment模型,并在Comment表中发生某些事情时执行某些 *** 作.在这种情况下,在创建Comment之后,观察者将创建一个CommentNotification,其中包含注释的ID和拥有该注释所关注事物的用户的ID(comment.commentable.owner.ID).这将要求您实现一个简单的方法:您想要为其注释的每个模型的所有者.因此,例如,如果可评论是照片,则所有者将是发布照片的用户.

这个基本设计应该足以让您入门,但请注意,如果您要为注释之外的其他内容创建通知,则可以通过在更通用的Notification模型中使用多态关联来扩展此设计.

class Notification < ActiveRecord::Base    belongs_to :notifiable,:polymorphic => true    belongs_to :target_userend

通过这种设计,您可以“观察”所有通知(要为其创建通知的模型),并在after_create回调中执行以下 *** 作:

class GenericObserver < ActiveRecord::Observer    observe :comment,:like,:wall_post    def after_create(notifiable)        ...        Notification.create!(notifiable_ID: notifiable.ID,notifiable_type: notifiable.class.name,target_user_ID: notifiable.user_to_notify.ID)        ...    endend

这里唯一棘手的部分是user_to_notify方法.所有需要通知的模型都必须以某种方式实现它,具体取决于模型的内容.例如,wall_post.user_to_notify只是墙的所有者,或者like.user_to_notify将是“喜欢”的东西.您甚至可能有多个人通知,例如当有人对其进行评论时通知照片中标记的所有人.

希望这可以帮助.

总结

以上是内存溢出为你收集整理的ruby-on-rails – 通知ala Facebook(数据库实施)全部内容,希望文章能够帮你解决ruby-on-rails – 通知ala Facebook(数据库实施)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1280953.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存