gpt4 book ai didi

ruby-on-rails - Rails 5 - 如何恢复/删除已经广播的通知?

转载 作者:太空宇宙 更新时间:2023-11-03 16:41:10 24 4
gpt4 key购买 nike

在 Rails 5 中,我使用 ActionCable 进行实时广播通知。一旦 Notification 对象被创建,广播就会发生。现在我想在 Notification 对象被删除时还原广播通知。

在notification_broadcast_job.rb中,

def perform(notification, user_id)
ActionCable.server.broadcast "notifications:#{user_id}", data: NotificationSerializer.new(notification)
end

在notification.rb中,

after_commit :broadcast_notification

private

def broadcast_notification
users.each do |user|
NotificationsBroadcastJob.perform_later(self, user.id)
end
end

现在的问题是,当用户 A 喜欢属于用户 B 的一篇帖子时,B 将收到通知(无需重新加载页面)。当用户 A 立即不喜欢它时,用户 B 应该会发出通知(无需重新加载页面)。现在删除的对象(通知)将简单地显示在列表中。

我该如何解决这个问题?请帮助我。

最佳答案

您的问题是您无法区分对象 Notification 是创建还是删除?

您可以使用after_createafter_destroy 而不是after_commit

后端将数据传递给前端,然后前端显示或隐藏数据。关键是 font-end 需要知道是显示还是隐藏。所以后台和前台之间应该有一个协议(protocol)。有一个不优雅的例子:

在notification.rb中,

after_create :broadcast_notification
after_destroy :delete_notification
private

def broadcast_notification
users.each do |user|
NotificationsBroadcastJob.perform_later(self,'created', user.id)
end
end

def delete_notification
users.each do |user|
NotificationsBroadcastJob.perform_later(self,'delete', user.id)
end
end

在notification_broadcast_job.rb中,

def perform(notification, message_type , user_id)
ActionCable.server.broadcast "notifications:#{user_id}", data:{ message_type: message_type, info: {id: notification.id, body: notification.body}}
end

前端会先读取message_type。然后它知道显示或隐藏某些东西。

前端js代码:

if(data.message_type == 'created'){
$('***').append('<li id=' + data.info.id + '>' + data.info.body +'</li>'); //
}else{
$('#'+ data.info.id).hide();
}

关于ruby-on-rails - Rails 5 - 如何恢复/删除已经广播的通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49421905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com