实现用户电子邮件首选项的方法?

时间:2013-04-02 16:46:21

标签: ruby-on-rails email

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

  1. 每位用户has_one EmailPreference
  2. EmailPreferences表将包含2列:Friendship(布尔值)和Message(布尔值)。
  3. 默认情况下,它们都是真的。因此,用户将收到新邮件和收到的新请求的电子邮件。
  4. 用户可以转到“编辑”操作并根据自己的选择更新值。
  5. 我打算使用if statement,它会在发送电子邮件方式之前检查@user.emailpreference.message?@user.emailpreference.friendship?
  6. 我想知道这是否是最佳方式。

3 个答案:

答案 0 :(得分:3)

一些注意事项 - 我会问你是否想要使用has_one或只是将列添加到用户。我也倾向于使用日期而不是布尔值,所以你可以看到布尔值设置的时间。对于命名,请考虑“友谊”和“消息”之外的其他内容。如果它是用户的属性,我会考虑'subscribed_to_friendships'和'subscribed_to_messages'之类的内容。

我一般避免使用has_one的原因是进行非常简单的查询并减少维护需求。很可能你会得到所有应该收到消息并在其中循环的用户,我更愿意避免加入并保持简单。我也不太喜欢这个孩子的假和零是多少。这将帮助您避免删除/添加首选项记录,尤其是在默认值为true且默认情况下您将为大多数用户创建首选项时。

答案 1 :(得分:1)

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

             Id Name
             1  Friendship
             2  Message

             Id  User Id Flag
             1      1     TRUE
             2      1     False

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

答案 2 :(得分:0)

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