如何实施通知系统?

时间:2013-10-01 08:53:26

标签: mysql notifications

我已经建立了一个帖子和评论系统,现在我会添加一个通知系统,以便在每次有人撰写评论时提醒对话中的每个用户。

我的问题是,在构建此系统的数据库方面,哪种方法最好? 我想到了一个包含以下字段的通知表:

id_notification | sent_by | id_user_receiver | id_post
      1              2             3              10

在此示例中,id为2的用户已向id为10的帖子写了评论,而id为3的用户收到了通知。但是,如果对话涉及100或1000个用户,则每次用户在对话上写字时,我将在数据库中结束100或1000条记录。我认为不是正确的方法。什么是更好的解决方案?

2 个答案:

答案 0 :(得分:3)

我认为这是正确的方法,如果用户阅读通知,您只需删除该行,因为将来不再需要它。除此之外,1000条记录都不算什么。您可以轻松地在表中包含数百万条记录,只需确保您的索引正确。

答案 1 :(得分:0)

第一步是为通知

创建一个新模型和控制器
   $ rails g model Notification  post:references comment:references user:references read:boolean

   $ rake db:migrate
   $ rails g controller Notifications index

完成此操作后,下一步是将has_many:notifications添加到User,Post和Comment模型。

完成此操作后,将以下代码添加到Comments模型中:

       after_create :create_notification

       private

         def create_notification
           @post = Post.find_by(self.post_id)
           @user = User.find_by(@post.user_id).id
             Notification.create(
             post_id: self.post_id,
            user_id: @user,
             comment_id: self,
             read: false
              )
        end

创建评论后,上述代码段会创建通知。 下一步是编辑Notifications控制器,以便删除通知,用户可以将通知标记为已读:

       def index
         @notifications = current_user.notications
         @notifications.each do |notification|
         notification.update_attribute(:checked, true)
      end
     end

      def destroy
        @notification = Notification.find(params[:id])
        @notification.destroy
        redirect_to :back
      end

下一件要做的事情是设置删除评论时删除通知的方法:

          def destroy
           @comment = Comment.find(params[:id])
           @notification = Notification.where(:comment_id => @comment.id)
             if @notification.nil?
               @notification.destroy
             end
           @comment.destroy
           redirect_to :back
        end

最后要做的是创建一些视图。你可以随心所欲地做什么