2016-07-15 35 views
1

我能找到的所有例子都是订阅单个房间,但是如果我有房间A,B和C以及我(作为用户)都在其中。如何使用Action Cable订阅多个聊天室

这是一个房间http://edgeguides.rubyonrails.org/action_cable_overview.html#client-server-interactions-subscriptions

+0

什么阻止你只做三次? 'App.cable.subscriptions.create {信道: “ChatChannel”,内: “RoomA”}' 'App.cable.subscriptions.create {信道: “ChatChannel”,内: “RoomB”}' 'App.cable.subscriptions.create {channel:“ChatChannel”,room:“RoomC”}' – Shaunak

+0

房间来自分贝,所以我不能硬编码它们。我将不得不创建JS dynmically - .-必须有一个更简单的方法 –

+0

你不需要在你的JavaScript文件中硬编码。您可以在JavaScript中获取房间列表。许多方法来做到这一点。您可以使用js.erb将它们呈现为js。或者,您可以拨打服务器的ajax电话并接收可用聊天室列表。您所要求的不是Rails或Action Cable问题。其基本的服务器客户端体系结构以及它如何使用AJAX进行交互。 – Shaunak

回答

-1

一个例子也许这是东西,可以帮助link,在* .js.erb模板,你可以动态地创建房间本身。

<% Chatroom.all.each do |chatroom| %> 

    App['room' + <%=chatroom.id%>] = App.cable.subscriptions.create({channel: 'MessagesChannel', room: <%=chatroom.id%>}, { 
    received: function(data) { 
    $("[data-chatroom='" + this.chatroomId + "']").removeClass('hidden') 
    return $("[data-chatroom='" + this.chatroomId + "']").append(data.message); 
    }, 

    setChatroomId: function(chatroomId) { 
    this.chatroomId = chatroomId 
    } 
}); 
<% end %>