Ruby on rails 用户电子邮件首选项-考虑使用rails设置。我这样做对吗?
问题 我想为我的用户实现电子邮件首选项。我认为要么是宝石要么是叉子才是出路,但我不太确定我应该使用rails设置(或rails设置缓存)gem来实现这一点,还是有更好的方法?如果我要使用这些宝石中的一种,我们将非常感谢您提供的任何提示或潜在的陷阱。 我想做什么Ruby on rails 用户电子邮件首选项-考虑使用rails设置。我这样做对吗?,ruby-on-rails,email,serialization,user-preferences,Ruby On Rails,Email,Serialization,User Preferences,问题 我想为我的用户实现电子邮件首选项。我认为要么是宝石要么是叉子才是出路,但我不太确定我应该使用rails设置(或rails设置缓存)gem来实现这一点,还是有更好的方法?如果我要使用这些宝石中的一种,我们将非常感谢您提供的任何提示或潜在的陷阱。 我想做什么 主开关-打开或关闭所有系统电子邮件 每个用户都有一个“主开关”,告诉我他们是否选择了所有电子邮件。它基本上是一个复选框,上面写着“给我发电子邮件”。如果复选框未选中(false),他们将永远不会收到系统电子邮件(密码重置除外)。如果选中该
class User < ActiveRecord::Base
has_settings do |s|
s.key :email_master, :default => true
s.key :new_comment_email, :default => true
s.key :daily_recap_email, :defaults => { :send => true, :days => [0,1,2,3,4,5,6] }
# or maybe this would be easier
s.key :daily_recap_email, :defaults => { :send => true, :sunday => true, :monday => true, :tuesday => true }
s.key :weekly_recap_email, :defaults => { :send => true, :day => 0 }
end
end
或者,对于每日回顾电子邮件来说,更复杂的情况是:
if user.settings.email_master && user.settings(:daily_recap_email).send && user.settings(:daily_recap_email).days.include?(3)
UserMailer.daily_recap_email(user).deliver
end
我在以前的应用程序中为此做了什么
以前,我使用EmailPreferences模型完成了这项工作,该模型与我的用户模型是1比1。问题是扩展很困难——每当我根据某个事件创建新的系统电子邮件时,我都必须在EmailPreferences表中添加一列。这也是一个棘手的问题,因为这个表大部分都是布尔值,所以我可以有一个“in”或“out”(真或假)设置,但不能有更多。我还发现,很难确定用户是否应该收到电子邮件,因为我必须链接方法,才能得出最终的问题:“我是否应该将此电子邮件作为此事件的结果发送给此用户?”
if user.settings.email_master && user.settings(:daily_recap_email).send && user.settings(:daily_recap_email).days.include?(3)
UserMailer.daily_recap_email(user).deliver
end