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