2

我想实现一个功能,让每个用户决定他/她将收到的电子邮件类型。到目前为止,我只能看到用户在收到好友请求和收到新消息时收到电子邮件。我计划实施的方式如下:

  1. 每个用户has_one电子邮件首选项
  2. EmailPreferences 表将有 2 列:友谊(布尔)和消息(布尔)。
  3. 默认情况下,它们将是真的。因此,用户将收到有关收到的新消息和新请求的电子邮件。
  4. 用户可以转到编辑操作并根据他的选择更新值。
  5. 我计划使用if statementwhich 将检查是否@user.emailpreference.message?@user.emailpreference.friendship?在发送电子邮件方法之前。

我想知道这是否是最好的方法。

4

3 回答 3

4

几个考虑因素 - 我会质疑您是否要执行 has_one 或只是将列添加到用户。我也倾向于使用日期而不是布尔值,因此您可以看到布尔值的设置时间。对于命名,请考虑“友谊”和“信息”以外的其他内容。如果它是用户的一个属性,我会考虑像“subscribed_to_friendships”和“subscribed_to_messages”这样的东西。

我通常避免使用 has_one 的原因是进行非常简单的查询并减少维护需求。您可能会得到所有应该收到消息并循环访问它们的用户,我更喜欢避免加入并保持简单。我也不太喜欢孩子身上的 false 和 null 是多么的相同。这将帮助您避免删除/添加首选项记录,尤其是在默认设置为 true 并且您将在默认情况下为大多数用户创建首选项的情况下。

于 2013-04-02T18:25:14.047 回答
1

我看到该方法中的一个问题是,如果明天您有更多类型作为首选项,则意味着当有人加入而不是您想要发送电子邮件时,在这种情况下,您必须再添加一列。为什么不进一步规范化它并使用更多表来存储 Preference 类型

             Id Name
             1  Friendship
             2  Message

             Id  User Id Flag
             1      1     TRUE
             2      1     False

这意味着用户 1 选择了友谊,但没有选择消息。现在您可以轻松添加任何新的偏好。

于 2013-04-02T18:36:03.863 回答
0

https://stackoverflow.com/users/177489/swards的方法对我来说是最好的选择,因为 has_one 查询以后可能会一团糟。将列添加到用户模型和 gg!

于 2016-05-19T14:36:35.850 回答