Mysql 如何实施通知系统?

Mysql 如何实施通知系统?,mysql,notifications,Mysql,Notifications,我已经建立了一个帖子和评论系统,现在我将添加一个通知系统,以便在每次有人写评论时提醒对话中的每个用户 我的问题是,在数据库方面,哪种方法是构建这个系统的最佳方法? 我想创建一个包含以下字段的通知表: id_notification | sent_by | id_user_receiver | id_post 1 2 3 10 在本例中,id为2的用户向id为10的帖子写了评论,id为3的用户收到通知。但是,

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

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

id_notification | sent_by | id_user_receiver | id_post
      1              2             3              10

在本例中,id为2的用户向id为10的帖子写了评论,id为3的用户收到通知。但是,如果对话涉及100或1000个用户,每次有用户在对话上写东西时,数据库中就会有100或1000条记录。我认为这不是正确的方法。什么是更好的解决方案?

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

第一步是创建一个新的模型和控制器以进行通知

   $ rails g model Notification  post:references comment:references user:references read:boolean

   $ rake db:migrate
   $ rails g controller Notifications index
完成后,下一步是添加has_many:向用户、帖子和评论模型发送通知

完成此操作后,将以下代码添加到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
创建注释后,上面的代码段将创建一个通知。 下一步是编辑通知控制器,以便可以删除通知,并且用户可以将通知标记为已读:

       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
最后要做的是创建一些视图。你想做什么就做什么