Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.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/8/design-patterns/2.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设计指南:将用户操作限制为每天X次,将某些操作通知版主和用户_Ruby On Rails_Design Patterns_Ruby On Rails 3_Notifications_Observer Pattern - Fatal编程技术网

Ruby on rails Rails设计指南:将用户操作限制为每天X次,将某些操作通知版主和用户

Ruby on rails Rails设计指南:将用户操作限制为每天X次,将某些操作通知版主和用户,ruby-on-rails,design-patterns,ruby-on-rails-3,notifications,observer-pattern,Ruby On Rails,Design Patterns,Ruby On Rails 3,Notifications,Observer Pattern,我正在开发一个web应用程序,人们可以使用特定于行业的分类法保存记录。我的大多数用户都会熟悉它,但有些人可能不熟悉,或者他们可能已经生锈了。。。等等 我在这些记录中有一些必填字段,我想让人们选择“我不知道”。但是,我不希望数据库中充满懒惰的“我不知道”条目,所以我想限制每个用户每天只标记几次“我不知道” 此外,我在网站上有版主,他们将返回并查看“我不知道”的条目。我希望版主在登录网站时收到任何新的“我不知道”答案的通知,以便他们可以查看并更正记录 最后,我希望那些记录已被更正的用户在登录时得到更

我正在开发一个web应用程序,人们可以使用特定于行业的分类法保存记录。我的大多数用户都会熟悉它,但有些人可能不熟悉,或者他们可能已经生锈了。。。等等

我在这些记录中有一些必填字段,我想让人们选择“我不知道”。但是,我不希望数据库中充满懒惰的“我不知道”条目,所以我想限制每个用户每天只标记几次“我不知道”

此外,我在网站上有版主,他们将返回并查看“我不知道”的条目。我希望版主在登录网站时收到任何新的“我不知道”答案的通知,以便他们可以查看并更正记录

最后,我希望那些记录已被更正的用户在登录时得到更新记录的通知。通过这种方式,他们可以回去看看他们应该如何归档记录

我真正想知道的是:

  • 这类问题是否遵循您所意识到的特定模式?(即:有没有一个术语可以让我在谷歌上找到关于如何处理这种情况的好资源)
  • 你是否知道一些很好的阅读/教程可能会有所帮助
  • 最重要的是,您能否提供一些关于如何以“Rails方式”解决此问题的指导
  • 谢谢

    -编辑- 让我更清楚地知道我真正希望的是:如果你的网站上有这种需求,你会如何解决?你会用观察员吗?您是在模型中创建属性并让观察者“操纵”该属性,还是将所有代码保留在观察者中。有没有别的办法解决这个问题

    我真的不知道如何处理这个问题,我非常重视你们能给出的任何反馈,比如你们会如何看待这类问题,以及你们可能如何解决它的提纲

    我知道我可以使用观察者作为解决方案的一部分,但我真的不知道告诉观察者注意24小时内是否发生了三次事件的最佳方法。。。这类事情,或者知道是否有人读过通知

    谢谢

    你不能用一个?中有一些如何使用它们的示例。

    您不能使用一个来实现这一点吗?有一些关于如何使用它们的例子

    class YourObserver < ActiveRecord::Observer
       observe :model_to_observe
    
       # an example of callback
       def after_save(model_to_observe)
          #some stuff to check and do
       end
    end
    
    干杯


    干杯

    我相信你在这里描述的基本上是“学术方法”,请参见:

    但这可能会变得非常复杂。我认为最好尽量简单地解决问题

    对于您的用户/版主保存方案,我建议您阅读有关回调的内容:

    例如,当用户最初保存记录时,您可以使用“after_create”回调来执行某些操作;当主持人或用户更新记录时,您可以使用“after_update”回调(您可以添加一个条件来确定更新记录的用户类型,并做出相应的响应)。[“保存后”包括创建和更新案例。]

    在您的视图中,您可能允许用户按记录状态进行筛选。例如,用户可能希望查看所有可查看的记录,或仅查看由主持人重新分配给他们的记录。根据记录的状态,您可以直观地提醒用户(例如,突出显示一行)

    这与bug跟踪器没有什么不同。进入系统的bug可能最初未分配,由程序员用户获取,或者从一开始就分配给程序员。程序员进行修复,更新状态,然后其他用户类型(如测试人员)可能需要检查修复。如果bug未修复,测试人员可能会重新分配修复给程序员发邮件

    这就是工作流程


    关于“我不知道”,您可以将其作为计数器来实现,但您还需要跟踪日期,以便您可以每天使用计划任务或通过一些用户事件(如登录)来重置日期。

    我相信您在这里描述的基本上是“。有关学术方法,请参阅:

    但这可能会变得非常复杂。我认为最好尽量简单地解决问题

    对于您的用户/版主保存方案,我建议您阅读有关回调的内容:

    例如,当用户最初保存记录时,您可以使用“after_create”回调来执行某些操作;当主持人或用户更新记录时,您可以使用“after_update”回调(您可以添加一个条件来确定哪种用户类型正在更新记录,并相应地作出响应)。[“after_save”涵盖创建和更新案例。]

    在视图中,您可能允许用户按记录状态进行筛选。例如,用户可能希望查看所有可查看的记录,或者只查看由版主重新分配给他们的记录。根据记录的状态,您可以直观地提醒用户(例如,突出显示一行)

    这和bug追踪器没什么不同。进入系统的bug可能最初未分配,由程序员用户获取,或者从一开始就分配给程序员。程序员进行修复,更新状态,然后其他用户类型(如测试人员)可能需要查看修复。如果错误没有被修复,测试人员可能会将该项目重新分配给程序员

    这就是工作流程

    关于“我不知道”,您可以将其作为计数器来实现,但您还需要跟踪日期,以便您可以使用计划任务或一些用户事件(如登录)每天重置日期。

    继续(更详细一点)

    1) 使用自定义验证,检查用户id、答案和更新的地址。如果答案“我不知道”在>1.day.ago更新时出现的次数超过X次。。。让它通过验证吗

    2) 您将需要“持久闪存消息”。这意味着您需要使用FlashMessage模型来存储消息
    config.active_record.observers = :you_observer
    
    class DataQualityObserver < ActiveRecord::Observer
       observe :book  
       def after_save(book)
         book.process_incomplete_category
         book.process_complete_category
       end
    end
    
    Rails::Initializer.run do |config|
      # ..
      # ..
      config.active_record.observers = :data_quality_observer
    end
    
    class Book
      INCOMPLETE_CATEGORY = "I don't know."
    
      def complete_category?
        category != INCOMPLETE_CATEGORY
      end
    
      def process_incomplete_category
        return if complete_category?
    
        k = Book.count(
          :conditions => ["user_id = ? AND category = ? AND updated_at > ?", 
            self.user_id, INCOMPLETE_CATEGORY, 1.day.ago]
        )
    
        UserMailer.deliver_incomplete_category_notification(self)  if ( k > 3)    
      end
    
      # if the category became complete
      def process_complete_category
        return unless complete_category?
        return unless (category_was == INCOMPLETE_CATEGORY)
    
        # do additional check to ensure admin did the changes
        UserMailer.deliver_complete_category_notification(self)
      end
    
    end
    
    class UserMailer < ActionMailer::Base
    
      def incomplete_category_notification(book)
        from        "bot@domain.com"
        sent_on     Time.now      
        recipients  "admin@domain.com"
        body        :book => book   
        subject     "User #{book.user.name} has entered 3 incomplete categories"    
      end
    
      def complete_category_notification(book)
        from        "bot@domain.com"
        sent_on     Time.now      
        recipients  book.user.email
        body        :book => book   
        subject     "The category field was updated for a record you created"    
      end
    
    end