我想实现一项功能,让每个用户决定他/她将收到的电子邮件类型。到目前为止,我只能看到用户在收到友情请求时以及他/她收到新消息时接收电子邮件。我计划实现的方式如下:
has_one
EmailPreference if statement
,它会在发送电子邮件方式之前检查@user.emailpreference.message?
或@user.emailpreference.friendship?
。我想知道这是否是最佳方式。
答案 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!