Facebook 的通知(数据库实现)

2023-12-11

我想知道 Facebook 如何实现他们的通知系统,因为我想做类似的事情。

  • FooBar 评论了你的状态
  • Red1、Green2 和 Blue3 对您的照片发表了评论
  • MegaMan 和其他 5 人评论了您的活动

我无法将多个通知写入单个记录,因为最终我将拥有与每个通知关联的操作。另外,在视图中,当单个主题存在一定数量的通知时,我希望将通知呈现为可扩展列表。

  • FooBar 评论了您的状态(操作)
  • Red1、Green2 和 Pink5 对您的照片发表了评论 [+]
  • MegaMan and 3 others commented on your event [-]
    • MegaMan 评论了您的活动(操作)
    • ProtoMan 评论了您的活动(操作)
    • 巴斯评论了您的活动(行动)
    • DrWilly 对您的活动发表了评论(行动)

Cheers!

PS顺便说一句,我正在使用 postgres 和 Rails。


有多种方法可以实现这一点。这实际上取决于您想要涵盖哪种类型的通知以及您需要收集有关通知的哪些信息以将其显示给正确的用户。如果您正在寻找一个简单的设计,仅涵盖有关已发布评论的通知,您可以使用以下组合多态关联 and 观察者回调:

class Photo < ActiveRecord::Base
# or Status or Event
    has_many :comments, :as => :commentable
end

class Comment < ActiveRecord::Base
    belongs_to :commenter
    belongs_to :commentable, :polymorphic => true # the photo, status or event
end

class CommentNotification < ActiveRecord::Base
    belongs_to :comment
    belongs_to :target_user
end

class CommentObserver < ActiveRecord::Observer
    observe :comment

    def after_create(comment)
        ...
        CommentNotification.create!(comment_id: comment.id,
          target_user_id: comment.commentable.owner.id)
        ...
    end
end

这里发生的情况是,每张照片、状态、事件等都有很多评论。 AComment显然属于:commenter但也为了一个:commentable,它可以是照片、状态、事件或您希望允许评论的任何其他模型。然后你就有了一个CommentObserver这会观察你的Comment模型并在发生任何事情时执行某些操作Comment桌子。在这种情况下,经过一段Comment创建后,观察者将创建一个CommentNotification包含评论的 id 和拥有该评论相关内容的用户的 id (comment.commentable.owner.id)。这需要您实现一个简单的方法:owner对于您想要发表评论的每个模型。因此,例如,如果可评论是照片,则所有者将是发布该照片的用户。

这个基本设计应该足以帮助您入门,但请注意,如果您想为评论之外的其他内容创建通知,您可以通过在更通用的环境中使用多态关联来扩展此设计。Notification model.

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

通过这种设计,您将“观察”您的所有notifiables(您想要为其创建通知的模型)并在您的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)
        ...
    end
end

这里唯一棘手的部分是user_to_notify方法。所有型号notifiable必须根据模型的不同以某种方式实现它。例如,wall_post.user_to_notify只是墙的所有者,或者like.user_to_notify将是“喜欢”的事物的所有者。您甚至可能需要通知多个人,例如当有人评论照片时通知照片中标记的所有人员。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Facebook 的通知(数据库实现) 的相关文章

  • 何时使用node.js、sinatra、rails? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这 3 种语言 框架的最佳用途是什么 混合所有 或 2 个 有用吗 如果您正在构建一个完整的 Web 应用程序 您可能应该使用 Rails 因为
  • Facebook C# SDK - 服务器流身份验证

    我正在使用通过 NuGet 安装的 Facebook C SDK 以允许用户使用 Facebook 登录我的网站 在我找到的所有 C SDK 文档中 访问令牌是使用 JavaScript SDK 获取的 我想在不使用 JavaScript
  • Rails Active Storage - 保留现有文件/上传吗?

    我有一个 Rails 模型 has many attached files 默认情况下 通过 Active Storage 上传时 如果您上传新文件 它会删除所有现有上传内容并将其替换为新文件 我有一个控制器破解 由于多种原因 它不太理想
  • 检索线索广告 Facebook API

    我在检索潜在客户广告时遇到问题 我有广告 ID 和页面 ID 我没有创建它们 但被添加为开发人员 我试图使用 PHP SDK 和这个https developers facebook com docs marketing api guide
  • 将控制器操作处理为 JS 而不是 HTML

    所以我有以下形式 Follow 我试图
  • 在 iOS 5 中,我们可以邀请人们使用我们的应用程序或通过 Facebook 从应用程序发送好友请求吗?

    考虑X and Y是朋友Facebook他们都在各自的手机中安装了一个应用程序 但他们在这一点上并不是朋友应用程序的好友列表 那么现在 可以X 发送好友请求 Use Facebook sdk 3 1 https developers fac
  • 未知属性:user_id

    我在执行 current user stories build 期间收到错误未知属性 user id class User lt ActiveRecord Base has many stories class name Story for
  • Facebook Android 意图

    我对这个意图有疑问 这个意图是发送文本类型的消息 一切正常 电子邮件 短信 推特以及手机上的任何内容 但唯一有问题的是facebook 它会尝试以链接而不是文本的形式发布 Intent s new Intent android conten
  • Rails 3 分页,will_paginate 与 Kaminari

    我的设置 Rails 3 0 9 Ruby 1 9 2 我正在为我的应用程序寻找分页解决方案 发现有一个新的宝石Kaminari与值得信赖的人相比will paginate 看起来像will paginate有一段时间没有更新了 但后来又以
  • Phonegap facebook 插件:android 的各种问题

    我正在尝试将 Phonegap 3 1 与 Phonegap facebook plugin 集成 以使我的应用程序能够使用 facebook 登录 https github com phonegap phonegap facebook p
  • Devise:允许用户注册为“UsErNaMe”但使用“用户名”登录

    与大多数网站的工作方式相同 我将 UsErNaMe 存储在数据库中 但让用户使用 用户名 登录 这是一个相当明显且必要的功能 很多人似乎都问过它 但我不断遇到的解决方案似乎与 Devise 自己的文档脱节 例如 考虑这篇博文 http an
  • 用于 S3 私有文件的 ActiveStorage

    到目前为止 我一直在使用 Paperclip 将一些文件上传到 S3 其中一些文件不是公开的 Paperclip 允许通过以下位将一些文件作为私有文件上传 has attached file image styles large 2000x
  • 为 Rails 上的 postgresql 创建用户

    我选择 postgresql 作为我的 Rails 数据库 但当我尝试运行 rake db create all 时 我遇到了一个明显常见的错误 即 致命 角色 app 不存在 我找到了两种解决方案 但我不确定哪一种是正确的 有一个网站说
  • 如何通过 SQL 表关联 SQL 中的实体

    我是数据库设计的初学者 我需要为项目创建数据库 我可以用面向对象的术语解释我想要做什么 值得庆幸的是 数据库专家会很友善地向我解释如何在数据库方面处理这个问题 我想创建一个与位置实体 州 城市 有关系的用户 ID 名称 实体 所以在编程语言
  • 如何将 devise/omniauth 重定向到我登录的页面?

    我通过omniauth 进行了身份验证 并且该链接通过layout application html haml 在每个页面上都可用 然而 当他们完成omniauth身份验证后 他们都会进入root权限 我如何设置它 以便他们重定向到他们单击
  • 删除数据库中的行后如何重新排序ID

    我正在使用 C 来制作具有 sql 数据库的程序 在数据库中我有一个名为Workers 它有一个自动增量和主键ID column 当我删除一条记录时 ID 之间会出现间隙 删除记录后如何重新排序 ID UPDATE 我要做的就是找到记录后将
  • 如何处理数据库中的巨大结果集

    我正在设计一个多层数据库驱动的 Web 应用程序 SQL 关系数据库 用于中间服务层的 Java 用于 UI 的 Web 语言其实并不重要 中间服务层执行数据库的实际查询 用户界面只是要求某些数据 并不知道它是由数据库支持的 问题是如何处理
  • Rails 4 可安装引擎,找不到文件“jquery”

    我正在创建一个 Rails 可安装引擎插件 它使用 gem jquery rails 我在 gemspec 文件中添加了这段代码 s add dependency jquery rails gt 3 0 1 and run bundle i
  • 将记录批量插入到 Active Record 表中

    我发现我的Model create 当我一次添加大量记录时 语句需要很长时间才能运行 看着ActiveRecord 导入 https github com zdennis activerecord import wiki但它不适用于哈希数组
  • Rails:Passenger Standalone 适合生产部署吗?

    问题标题几乎概括了这一点 我找不到任何好的资源来概述使用 Phusion Passenger Standalone 进行 Rails 应用程序部署的优点 缺点 它与运行 Passenger Nginx 或 Passenger Apache

随机推荐