Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 用户电子邮件首选项-考虑使用rails设置。我这样做对吗?_Ruby On Rails_Email_Serialization_User Preferences - Fatal编程技术网

Ruby on rails 用户电子邮件首选项-考虑使用rails设置。我这样做对吗?

Ruby on rails 用户电子邮件首选项-考虑使用rails设置。我这样做对吗?,ruby-on-rails,email,serialization,user-preferences,Ruby On Rails,Email,Serialization,User Preferences,问题 我想为我的用户实现电子邮件首选项。我认为要么是宝石要么是叉子才是出路,但我不太确定我应该使用rails设置(或rails设置缓存)gem来实现这一点,还是有更好的方法?如果我要使用这些宝石中的一种,我们将非常感谢您提供的任何提示或潜在的陷阱。 我想做什么 主开关-打开或关闭所有系统电子邮件 每个用户都有一个“主开关”,告诉我他们是否选择了所有电子邮件。它基本上是一个复选框,上面写着“给我发电子邮件”。如果复选框未选中(false),他们将永远不会收到系统电子邮件(密码重置除外)。如果选中该

问题

我想为我的用户实现电子邮件首选项。我认为要么是宝石要么是叉子才是出路,但我不太确定我应该使用rails设置(或rails设置缓存)gem来实现这一点,还是有更好的方法?如果我要使用这些宝石中的一种,我们将非常感谢您提供的任何提示或潜在的陷阱。

我想做什么

  • 主开关-打开或关闭所有系统电子邮件

    每个用户都有一个“主开关”,告诉我他们是否选择了所有电子邮件。它基本上是一个复选框,上面写着“给我发电子邮件”。如果复选框未选中(false),他们将永远不会收到系统电子邮件(密码重置除外)。如果选中该框(true),则他们有资格获得系统电子邮件

  • 选择加入/退出多个系统电子邮件

    如果主开关为“true”(符合电子邮件的条件),则下一个配置是我为各个系统电子邮件提供复选框(“收到新消息”,“我启动的线程上的新评论”)。他们可以选择加入或退出每个电子邮件系统

  • 选择加入/退出一些带有附加传送选项的电子邮件

    最后,一些电子邮件将是“摘要”电子邮件,我想知道用户是否有资格接收电子邮件,以及他们希望多长时间接收一次。例如,帐户活动的每日摘要。我想允许他们选择加入/退出电子邮件,并告诉我如果他们选择加入,在哪一个工作日发送摘要。所以,“是的,周一到周五给我发这封邮件。”或者每周总结邮件:“是的,每个周日给我发这封邮件。”

  • 如果我了解rails设置gem,那么我的用户模型将如下所示:

    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