并且,为了将通知广播到流,在通知模型-6ren">
gpt4 book ai didi

javascript - 如何保持与使用从客户端传递到 ActionCable 服务器的参数的 channel 的连接?

转载 作者:行者123 更新时间:2023-11-30 20:06:53 25 4
gpt4 key购买 nike

我没有理会 actioncable。我想让用户订阅一个看起来像这样的 PostChannel

class PostNotificationsChannel < ApplicationCable::Channel

def subscribed
stream_from params[:post_id]
end

def unsubscribed
stop_all_streams
end
end

然后我有js了

/javascripts/channels/post_notifications.js

$(document).on('turbolinks:load', function() {
$("a.post_subscribe").click(function subscribeToPost() {
var post_id = $(this).parents("li").attr("class").split(" ")[0]; // Get the post id off the page
App.post_notifications = App.cable.subscriptions.create({channel: "PostNotificationsChannel", post_id: post_id}, {

connected: function() {},

disconnected: function() {},

received: function(data) {}
});
});
});

因此,您单击 .post_subscribe anchor 标记,它会获取我在页面上拥有的帖子 HTML 类的值,然后在创建订阅的 params 散列中使用它。这一切都很好,花花公子,点击它的用户将在该帖子发生某些操作时获得更新。但是,如果您刷新页面,则该连接无法将该消费者与该帖子重新连接,因为哈希中没有参数。所以,我想知道如何摆脱困境。

此外,即使在 Rails 指南页面上,它也会显示此 here所以他们正在传递参数,但是当页面重新加载时你如何保持连接?

最佳答案

所以我从你的问题中了解到,当用户点击“订阅”链接时,你希望用户成为该帖子的关注者。为此,您必须通过在用户和作为关注者的帖子之间建立关联,将此信息存储在数据库中。然后,每当该帖子发生事件时,向该特定帖子的所有关注者的通知流广播通知。

创建一个 NotificationsChannel,每个用户在登录网站时都会订阅该 channel ,例如,id 为 1 的用户登录后,他将订阅每个用户唯一的通知流,例如notify_user_1_channel

class NotificationsChannel < ApplicationCable::Channel
def subscribed
if params[:recepient].present?
stream_from "notify_#{params[:recepient]}_channel"
end
end

def unsubscribed
# Any cleanup needed when channel is unsubscribed
end
end

在您的 channel 脚本中,

App.chat = App.cable.subscriptions.create {
channel: "NotificationsChannel"
recepient: $('#recepient').data("recepient")
}

为了将接收者作为参数,在某处的 View 代码中,最好是在页脚中,

<div id="recepient" data-recepient="User_<%= current_user.id %>"></div>

并且,为了将通知广播到流,在通知模型的 after_create_commit 中,

ActionCable.server.broadcast "notify_#{notification.recepient_type}_#{notification.recepient_id}_channel"

关于javascript - 如何保持与使用从客户端传递到 ActionCable 服务器的参数的 channel 的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52833646/

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