ActionCable:如何使用动态通道

2024-02-14

我用 Rails 5 和 ActionCable 构建了一个简单的聊天,其中有一个简单的“聊天”频道。

如何使频道订阅和消息广播动态化,以便我可以创建聊天频道并将消息发送到正确的频道?

不幸的是,我找不到这方面的单个代码示例。

Update

下面的答案是正确的。我还发现 Rails 指南中现在提到了它。不认为它以前就在那里http://edgeguides.rubyonrails.org/action_cable_overview.html#client-server-interactions-subscriptions http://edgeguides.rubyonrails.org/action_cable_overview.html#client-server-interactions-subscriptions


在您的订阅创建中传递 roomIdjavascripts/channels/room.js:

MakeMessageChannel = function(roomId) {
  // Create the new room channel subscription
  App.room = App.cable.subscriptions.create({
    channel: "RoomChannel",
    roomId: roomId
  }, {
    connected: function() {},
    disconnected: function() {},
    received: function(data) {
      return $('#messages').append(data['message']);
    },
    speak: function(message, roomId) {
      return this.perform('speak', {
        message: message,
        roomId: roomId
      });
    }
  });

  $(document).on('keypress', '[data-behavior~=room_speaker]', function(event) {
    if (event.keyCode === 13) {
      App.room.speak(event.target.value, roomId);
      event.target.value = "";
      event.preventDefault();
    }
    return $('#messages').animate({
      scrollTop: $('#messages')[0].scrollHeight
    }, 100);
  });
};

In channels/room_channel.rb它可以作为订阅创建的参数,并且发言操作也只是使用正确的数据调用:

  def subscribed
    stream_from "room_channel_#{params[:roomId]}"
  end

  def speak(data)
     Message.create! text: data['message'], room_id: data['roomId']
  end

然后,如果您正在通过工作进行广播:

  def perform(message)
    ActionCable.server.broadcast "room_channel_#{message.room_id}", message: render_message(message)
  end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ActionCable:如何使用动态通道 的相关文章

  • webpacker:安装后应用程序中的页面开始加载很长时间

    我正在将 webpacker 安装到我的 Rails 应用程序中 安装后 我注意到应用程序中的页面开始加载很长时间 会发生什么情况 从日志 Completed 200 OK in 90075ms Views 90072 2ms Active
  • Puma Rails 5 Binding.pry 在超时前仅可用 60 秒

    当我使用时 Puma 超时了我的请求binding pry 在我的控制器中 def new require pry binding pry end 然后 我发出一个请求 该请求会击中控制器并进入 pry 会话 60秒后彪马 超时我的请求 重
  • 如何在 ActionCable 中发送 WebSocket 请求的状态

    有没有办法在 ActionCable 通道中向客户端发送请求状态 例如 如果发送的数据无效 或引发了一些未知的异常 我想在响应消息中显示错误文本 否则发送 状态 正常 我现在在客户端拥有的是订阅者的perform返回的方法true正如我们从
  • Rails 5,“nil 不是有效的资产源”

    我刚刚升级到 Rails 5 在尝试显示图像时遇到了一个奇怪的问题 我有 Rails 4 的确切代码 但升级后我得到 nil is not a valid asset source 在升级到 Rails 5 之前 我没有任何类似的问题 这里
  • ActiveRecord::NoEnvironmentInSchemaError

    我正在尝试在新升级的应用程序 Rails 5 上执行与数据库相关的操作 但无法在本地执行破坏性数据库命令 rails db reset or rails db drop 跟踪结果如下数据 rails db drop trace Invoke
  • 1 个错误禁止保存这本书[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在创作新书时遇到了问题 用户已登录 但仍然显示 1 个错误禁止保存这本书 用户必须存在 当我编辑我的书时 它工作正常
  • InstanceDouble(session) (匿名)> 收到意外消息 :[]= with

    我对 rspec 行为有疑问 我尝试为我使用的服务编写测试session 用于读取一些值并覆盖该值 例如我想测试什么 class CurrentCartService attr reader user session def initial
  • Rails - 操作电缆上的服务器阻塞

    我有一个在开发中完美运行的 Rails 应用程序 我已部署到服务器 应用程序加载并正确显示其登陆和关于页面 但是 当我使用 Action Cable 访问页面时 服务器会阻塞 从网页发出的最后一个请求与 Action Cable 相关 并且
  • 将 S3 与 Active Storage 结合使用时出现“请求已过期”

    我是第一次使用 ActiveStorage 在开发中一切正常 但在生产 Heroku 中我的图像无缘无故地消失了 第一次显示正常 但现在没有显示图像 在控制台中我可以看到这个错误 GET https XXX s3 amazonaws com
  • Rails 5 集成测试失败,并出现 NoMethodError: undefined method `[]=' for nil:NilClass 使用 Devise 帮助程序 sign_in 时

    我正在使用内置的 Minitest 为 Rails v5 1 编写集成测试 这是集成测试类 require test helper class PuppiesEndpointsTest lt ActionDispatch Integrati
  • 将保存/更新调用轨道转换为 sql

    我想获取运行时生成的sql save 当我在控制台中运行此命令时 irb main 018 0 gt a User last irb main 018 0 gt a first name gt Mohan irb main 019 0 gt
  • Rails 5 Action Cable 与 Nginx、Puma 和 Redis 一起部署

    我正在尝试使用 Capistrano 将启用 Action Cable 的应用程序部署到 VPS 我正在使用 Puma Nginx 和 Redis 用于电缆 经过几个障碍后 我能够让它在本地开发环境中运行 我正在使用默认的进程内 cable
  • 使用 Rails5 和 ActionCable 时不允许请求来源:http://localhost:3001

    Rails 5 0 0 beta2 中尝试使用 ActionCable 的应用程序出现服务器问题 使用 localhost 3000 效果很好 因为这是大多数 ActionCable 的默认设置 但是如果我尝试在端口 3001 上运行 Ra
  • Rails 使用哈希数组查找记录

    使用字段选择 按字段对查询 in clause 我有一个哈希数组 如下所示 product id 7629 group id 4 product id 8202 group id 3 我想返回的是所有的记录Items与数组中的字段对匹配的表
  • 水豚无法使用 action_cable

    我正在使用带有操作电缆的 Rails 5 beta 3 集成在开发中运行良好 但是当我尝试通过水豚运行功能测试时 它似乎没有命中通道操作 我正在使用 Portergeist 并将 puma 配置为水豚的服务器 我还使用 es5 shim 和
  • 在 ActionCable 中未找到订阅类“MyChannel”

    我在使用 Action Cable 时遇到问题 每当我运行程序时 我都会收到一条错误消息 Subscription找不到类ConversationChannel 当我尝试发送消息时 我收到此日志 成功升级到WebSocket REQUEST
  • Rails c 无法在 Rails 5 中工作

    关于在 Rails 5 应用程序内的终端中使用命令 rails c 抛出的错误如下所示 我不知道这在类似问题中意味着什么 解决方案是使用弹簧停止 我也尝试过 但没有 它仍然给出相同的错误 如果有人能指出这里的错误 那就太好了 Running
  • Rails - 将 join 与自定义命名的关联一起使用

    我有以下型号 class Measurement lt ApplicationRecord belongs to examination class name TestStructure foreign key examination id
  • Rails 5 错误消息:子模型父模型必须存在

    我有两个模型 父模型是财产 子模型是电话 当尝试使用嵌套电话数据创建新的属性记录时 我收到一条错误消息 Phones 属性必须存在 我研究了 Rails Guide 和许多其他文档 但没有确定原因 如果你想查看所有代码 这里有一个公共 gi
  • 在 Rails 5 中结合 API 和 Web 视图

    从 Rails 5 开始 API gem 被合并进来 现在 如果我有 API 可以通过 AJAX 从网页调用 这会给我们留下什么 我正在这里寻找最佳实践 当然 我可以自己使用 JSON 序列化器创建一条路由 然后 就有可能将 API 调用完

随机推荐

  • MacOS 10.8 的 rxtxSerial.dll

    我目前正在开发一个 ZigBee 项目 并在装有 Mountain Lion 10 8 的 Mac 上并使用 Eclipse IDE 进行编程 要通过 USB 使用我的 Zigbee 模块进行串行通信 我需要这个 rxtxSerial dl
  • PropTypes React Native 不是一个对象

    我的代码在本地反应时遇到 PropTypes 问题 import React Component PropTypes from react import Text from react native export default class
  • 如何使用控制台删除 GitLab 中的文件夹

    我错误地创建了一个名为src在我的 GitLab 存储库中 现在我想删除此文件夹 我尝试了多种方法来删除它 但我只能在本地删除它 而不能在我的 GitLab 存储库中删除它 该文件夹仍然存在 我想删除它 我已经尝试过这些命令 git rm
  • Python:Beautifulsoup 返回 None 或 [ ]

    你好 我正在练习我的请求和网络抓取技巧 所以我尝试抓取 youtube 上的趋势页面 并提取趋势视频的标题 这是这个链接youtube https www youtube com feed trending 这是我正在运行的代码 impor
  • 为什么ie7总是处于Quirks模式?

    这是我正在使用的 DOCTYPE 和 XML 声明 但 IE7 仍然总是进入怪异模式 有人知道为什么吗 提前致谢 如果 DOCTYPE 之前有任何内容除了 XML 序言之外 那么你就会在IE7中触发怪异模式 这包括空白和注释 XML pro
  • Python 根据条件关闭任务

    我使用 AsyncIO 和 Websockets 模块在 Python 中创建两个并发任务 每个任务都连接到 Websocket 服务器并接收消息 我正在尝试创建一个系统 当任务超过 4 秒没有收到消息时 它必须关闭连接和任务 但我很难弄清
  • 如何在 Arduino 上比较 __FlashStringHelper* 和 char*?

    我有一个将文本行输出到串行的板 我需要将这些文本行与我所知道的文本进行比较 本质上 我想做strcmp thestring F knownstring 但是似乎没有一个采用 FlashStringHelper 类型的 strcmp 版本 有
  • 是否可以通过引用返回临时对象

    是否可以从函数返回引用 如以下示例代码所示 string erase whitespace string text text erase etc return text Call string text erase whitespace s
  • jquery 和 random.org“Access-Control-Allow-Origin 不允许”

    我在使用 jQuery 从 random org 请求随机数时遇到问题 当我使用静态页面和以下 JavaScript 时 获取随机数没有任何问题 但是 我在 Heroku 上托管一个 Sinatra 应用程序 此外 当使用 Thin 在生产
  • 如何启动默认启用深色主题的 jupyter lab?

    答案是这个问题 https stackoverflow com questions 40518614 how to apply theme to jupyter lab指出 JupyterLab Dark 主题现在作为原版的一部分提供jup
  • 在巨大的 gzip 文件顶部添加一行

    我有一个巨大的 gzip 文件 400MB 我想在文件的开头附加一行文本 我正在考虑创建一个带有标题行的 gzip 文件 然后使用zcat合并头文件和日志文件 只是想检查是否有更好 优雅 有效的方法来做到这一点 两个 gzip 压缩文件连接
  • 无法使用 Transform 删除 Web.Config 节点

    我有一个包含这样的重写规则的 web config
  • Spring Boot 与 Jersey 和 Spring Security OAuth2

    以下是 Spring Boot 的示例 来自 GitHub 的示例代码 https github com spring projects spring boot tree master spring boot samples spring
  • 当文本换行时,Flexbox 不再对齐项目

    我正在努力使用flexbox容器连同bootstrap 4将我的元素水平居中对齐 这是我到目前为止所拥有的 div class d flex flex column align items center img class rounded
  • 是否可以在 GCE 上配置容器优化的操作系统虚拟机而无需实际部署映像?

    我想构建一个 CI 管道 其中基础设施阶段在 Google Compute Engine 上使用 Terraform 提供容器优化的操作系统实例beforeDocker 化的应用程序上传到 ArtifactRegistry 并首次部署 我的
  • 根据实体框架导航属性中的项目计数对绑定的 ASP.NET GridView 进行排序

    我有一个 ASP NET 页面 其中有一个绑定到 EntityDataSource 的 GridView 控件 请参阅下面的简化代码 网格显示了一个列表Parent项目并包括一个显示 Count 的列Children对于这位家长 我可以让网
  • PHP ImageMagick setColorspace 不起作用[重复]

    这个问题在这里已经有答案了 我正在尝试通过使用以下代码更改色彩空间来将图像转换为黑白图像 im new Imagick image png im gt setImageColorspace Imagick COLORSPACE GRAY i
  • Aurelia Typescript 项目仅适用于 Chrome

    有谁知道为什么列出 Aurelia Typescript 项目在这个 git 存储库中 https github com cmichaelgraham aurelia typescript只能在 Chrome 浏览器上使用吗 是否存在目前仅
  • 自引用结构定义?

    我写 C 的时间不长 所以我不确定应该如何做这些递归的事情 我希望每个单元格包含另一个单元格 但我在 字段 child 的类型不完整 行 这是怎么回事 typedef struct Cell int isParent Cell child
  • ActionCable:如何使用动态通道

    我用 Rails 5 和 ActionCable 构建了一个简单的聊天 其中有一个简单的 聊天 频道 如何使频道订阅和消息广播动态化 以便我可以创建聊天频道并将消息发送到正确的频道 不幸的是 我找不到这方面的单个代码示例 Update 下面