【问题标题】:How do notifications work with Mailboxer gem?通知如何与 Mailboxer gem 一起使用?
【发布时间】:2025-11-28 17:10:02
【问题描述】:

我正在尝试弄清楚如何使用 Mailboxer 设置通知系统。

我已经用它设置了一个站内消息系统,以便用户可以互相发送消息。现在我想用它从网站发送通知,通知用户他们的声誉点的变化或提醒他们必须完成的操作。类似于 Facebook 或 * 的下拉通知菜单。

例如,它可能包含以下类型的通知:

  • 用户因执行某项操作而获得一些积分:
    • "You received 50 points for helping #{user.name} with #{request.title}.
  • 提醒用户必须执行操作:
    • "You must review #{user.name}'s help with #{request.title}!
    • 将链接到一个页面以完成该操作。
  • 用户收到对他们发送的消息的回复:
    • "You've received a message from #{sender.name}"
    • 将链接到消息。

以下是一些细节:

  • 我不希望所有通知都发送电子邮件。大多数只需要在通知菜单中看到。 Mailboxer 中是否有一个选项可以控制通过电子邮件发送的内容,还是我必须绕过 Mailboxer 的邮件程序?

  • 我想在下拉菜单中以不同的方式格式化每种类型的通知。例如,为每个添加一个特定的字形图标。我可以为此使用通知type 字段(使用它来设置条件)吗? type 是如何工作的?我可以将其设置为一个字符串,例如“reputation”,具体取决于通知?

  • 可以将对象传递给notify 方法。我对这样做的目的感到困惑。该对象如何使用?我要发送哪些对象?


请随意留下一些关于邮箱通知的一般信息,而不是专门回答所有问题。

我很难找到通知功能的文档,因此,如果有一些 Mailboxer 知识的人能参与进来,我将不胜感激。提前致谢。

【问题讨论】:

标签: ruby-on-rails notifications mailboxer


【解决方案1】:

这是一个迟到的答案,但以防万一有人像我一样遇到这个问题,这就是我最终要做的。

有一个用户身份方法定义为https://github.com/mailboxer/mailboxer#user-identities

如果它返回一封电子邮件,则会发送一封电子邮件。如果它返回 nil,则不会发送任何电子邮件。

mailboxer中有一个notify方法,你可以用它来发送通知,

alice.notify("Hi","Bob has just viewed your profile!") 

并在mailboxer_email中检查该对象是否为通知。如果是,则不要发送电子邮件。

def mailboxer_email(object)

    if object.class==Mailboxer::Notification
      return nil
    else
      email
    end
 end

您可以在这里定义更复杂的逻辑,例如为某些类型的用户禁用电子邮件等。

【讨论】: