如何在Rails应用程序中处理电子邮件通知?

时间:2015-08-03 12:38:59

标签: ruby-on-rails ruby ruby-on-rails-4 database-design

我的应用程序有几个事件,用户可以根据这些事件收到电子邮件通知。从软件/数据库设计的角度来看,处理这个问题的最佳方法是什么?

以下是向用户发送电子邮件时的两个实例:

  1. 有人回复他们的评论。
  2. 有人喜欢他们的评论。
  3. 我还需要一种方法让用户在用户设置中单独关闭这些电子邮件事件。

    以下是我正在考虑的事情(这不是一种好方法):

    • 在用户表中有一堆布尔字段可以打开或关闭每个电子邮件通知(例如:is_send_email_replies,is_send_comment_likes)。
    • 然后,用户可以在其设置中打开或关闭这些bool值。

    有没有更好的实用方法来处理这个问题?

3 个答案:

答案 0 :(得分:3)

这被视为典型的用户设置,您可以将其另存为Rails json field或使用rails-settings 等宝石

因此,假设您使用rails-settings gem,您可以按照以下方式执行:

class User < ActiveRecord::Base
 has_settings :email_notifications
end

然后你可以设置和获取这样的设置

user.settings(:email_notifications).comments = true
user.settings(:email_notifications).likes = false
user.settings(:email_notifications).comments
# => true

答案 1 :(得分:0)

我建议你观看Ryan Bates关于活动的Railscasts(ep。#406),然后阅读public-activity宝石。这可以是处理向用户发送通知的事件的优雅方式。

关于如何存储和处理偏好设置,请查看Preferences gem,如说明本身所示:...sometimes it's necessary if you want users to be able to disable things like e-mail notifications.

答案 2 :(得分:0)

我过去处理此问题的一种方法是为首选项和电子邮件类型设置单独的模型。首选项表用作用户和类型之间的多对多关系,可以设置自己的首选项。

这里的主要优点是您可以根据需要添加任意数量的电子邮件类型(随着时间的推移),您不会堵塞您的用户模型。