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