【问题标题】:How to subscribe to multiple chat rooms using Action Cable如何使用 Action Cable 订阅多个聊天室
【发布时间】:2016-07-15 14:50:31
【问题描述】:

我能找到的所有示例都是订阅一个房间,但如果我有房间 A、B 和 C 并且我(作为用户)都在其中。

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

【问题讨论】:

  • 是什么阻止了你只做三遍? App.cable.subscriptions.create { channel: "ChatChannel", room: "RoomA" }App.cable.subscriptions.create { channel: "ChatChannel", room: "RoomB" }App.cable.subscriptions.create { channel: "ChatChannel", room: "RoomC" }
  • 房间来自数据库,所以我无法对其进行硬编码。我必须动态创建 JS -.- 必须有更简单的方法
  • 您不需要在 JavaScript 文件中进行硬编码。您可以在 javascript 中获取房间列表。有很多方法可以做到这一点。您可以使用 js.erb 将它们渲染成 js。或者您可以对服务器进行 ajax 调用并接收可用聊天室的列表。您要的不是 Rails 或 Action Cable 问题。它的基本服务器客户端架构以及它如何使用 AJAX 进行交互。

标签: ruby-on-rails chat actioncable


【解决方案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 %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-24
    • 2020-03-11
    • 2018-02-08
    • 2012-06-25
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多