Я пытаюсь получить небольшой красный круг уведомлений для динамического обновления в приложении чата Rails с помощью Action Cable. Проблема в том, что иногда, когда отправляется сообщение, он, кажется, запускает функцию приема более одного раза. Я уверен, что у меня правильно определены подписки, но что-то не так.Уведомления о действии для нескольких подписчиков
Здесь я не забудьте создать подписки, используя параметр chat_id. Же параметр используется в функции submitNewMessage
активы/JavaScript/каналы/chat.js
$(document).on('turbolinks:load', function() {
submitNewMessage();
$.ajax({
type: "GET",
dataType: "json",
url: "/chats",
success: function(data){
$.each(data, function(i, chat){
App['chat' + chat.id] = App.cable.subscriptions.create({
channel: "ChatChannel",
chat_id: chat.id},
{ received: function(data){
# Code to update notifications
}}
});
}
}
});
function submitNewMessage(){
$('#message_text').keydown(function(event) {
if (event.keyCode == 13) {
var text = event.target.value
App['chat' + chat_id].send({text: text})
$('#message_text').val(" ")
return false;
}
});
}
});
А в подписанном методе я также использовать chat_id PARAMS
каналов/chat_channel.rb
class ChatChannel < ApplicationCable::Channel
def subscribed
stream_from "chat_#{param['chat_id']}_channel"
end
def unsubscribed
# Any cleanup needed when channel is unsubscribed
end
def receive(payload)
Message.create(user_id: current_user.id, chat_id: params["chat_id"], text: payload["text"])
end
end
Как можно активировать полученную функцию в chat.js более одного раза при запуске нового комментария?