渲染后我该如何完成任务?

时间:2014-12-23 00:14:46

标签: ruby-on-rails

我即将为我的Android应用程序构建一个具有Rails后端的Notification系统。每当有人对帖子发表评论时,我都想通知所有相关人员。

当然,我可以这样做:

def create
  #Process commenting on the post
  #Process sending notification to all involved

  render :ok
end

话虽这么说,我不希望发送通知来减慢请求。最终,它并不决定是否创建帖子的命运。

我认为最好的解决方案可能是将任务添加到后台工作程序,后台工作程序会发送一组通知。是否有更好/不同的解决方案可用于此类事情?如何实施?

2 个答案:

答案 0 :(得分:0)

我希望使用this Rails Guide中描述的ActiveJob。您尝试做的事情以及ActionMailer的工作方式非常相似;它只是你发送通知而不是电子邮件。您使用回调将通知作业排队的方式与新用户注册时发送电子邮件的方式相同,如the ActionMailer Basics Guide的第2.1.4节所述。

答案 1 :(得分:0)

我会做以下事情:

  • 在评论模型中添加回调after_commit :notify_others, on: :create
  • notify_others方法应该使用刚创建的评论调用作业(NewCommentNotifierJob
  • NewCommentNotifierJob的执行方法中,使用评论确定应接收电子邮件通知并安排电子邮件发送的所有相关方

因此,对于每个新评论,您将安排1个作业,该作业将安排N个作业发送电子邮件通知。