【问题标题】:How to handle email notifications in a Rails app?如何在 Rails 应用程序中处理电子邮件通知?
【发布时间】:2015-10-25 13:44:54
【问题描述】:
我的应用有几个事件,用户会根据这些事件收到电子邮件通知。从软件/数据库设计的角度来看,处理此问题的最佳方法是什么?
以下是我向用户发送电子邮件的两种情况:
- 有人回复了他们的评论。
- 有人喜欢他们的评论。
我还需要一种方法让用户在其用户设置中单独关闭这些电子邮件事件。
这是我正在考虑做的事情(感觉不是一个好方法):
- 在用户表中有一堆布尔字段可以打开或关闭每个电子邮件通知(例如:is_send_email_replies、is_send_comment_likes)。
- 然后用户可以在他们的设置中打开或关闭这些布尔值。
有没有更好更实用的方法来处理这个问题?
【问题讨论】:
标签:
ruby-on-rails
ruby
ruby-on-rails-4
database-design
【解决方案1】:
这被认为是典型的用户设置,您可以将其保存为 Rails json field 或使用像 rails-settings
这样的 gem
因此,假设您将使用 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
【解决方案2】:
我建议您观看 Ryan Bates 的 Railscast 活动(ep. #406),然后阅读 public-activity gem。这是处理向用户发送通知的事件的一种优雅方式。
至于您将如何存储和处理首选项,请查看 Preferences gem 正如描述本身所说:...sometimes it's necessary if you want users to be able to disable things like e-mail notifications.
【解决方案3】:
我过去处理此问题的一种方法是为首选项和电子邮件类型设置一个单独的模型。偏好表充当用户和类型之间的多对多关系,他们可以在其中设置自己的偏好。
这里的主要优势是您可以根据需要添加任意数量的电子邮件类型(随着时间的推移),并且您不会堵塞您的用户模型。