Rails 6 - 动作电缆问题

Posted

技术标签:

【中文标题】Rails 6 - 动作电缆问题【英文标题】:Rails 6 - Action Cable Issue 【发布时间】:2021-01-28 09:16:42 【问题描述】:

我对 Ruby 有点陌生,我正在构建一个非常简单的 Rails 应用程序,它允许使用 Action Cable 进行聊天类型的功能。我正在遵循的教程没有使用 rails 6,因此在构建它时它有点不同,但似乎除了下面的 jQuery 来启动 Action Cable 连接之外,此时一切都在工作。我收到一个控制台错误,在 cable.js 文件中显示“未捕获的 ReferenceError:未定义应用程序”。这是有史以来第一次使用动作电缆和导轨,因此非常感谢您的帮助。

这是我的 git 存储库的链接:https://github.com/scottlandes1217/Hubbubb

cable.js

// Action Cable provides the framework to deal with WebSockets in Rails.
// You can generate new channels where WebSocket features live using the `rails generate channel` command.
//
//= require action_cable
//= require_self
//= require_tree ./channels

(function() 
  this.App || (this.App = );

  App.cable = ActionCable.createConsumer();

).call(this);

forum_channel.js

$(function() 
  $('[data-channel-subscribe="forum"]').each(function(index, element) 
    var $element = $(element),
        forum_id = $element.data('forum-id')
        messageTemplate = $('[data-role="message-template"]');

    $element.animate( scrollTop: $element.prop("scrollHeight"), 1000)

    App.cable.subscriptions.create(
      
        channel: "ForumChannel",
        forum: forum_id
      ,
      
        received: function(data) 
          var content = messageTemplate.children().clone(true, true);
          content.find('[data-role="user-avatar"]').attr('src', data.user_avatar_url);
          content.find('[data-role="message-text"]').text(data.message);
          content.find('[data-role="message-date"]').text(data.updated_at);
          $element.append(content);
          $element.animate( scrollTop: $element.prop("scrollHeight"), 1000);
        
      
    );
  );
);

【问题讨论】:

顺便说一句 - 如果有帮助的话,这就是我正在学习的教程iridakos.com/programming/2019/04/04/… 【参考方案1】:

你看过作者Github repo吗? 我不是 jQuery 方面的专家,但您似乎缺少一些东西。

【讨论】:

【参考方案2】:

这仍然是一个不完整的答案:

我也有问题,因为所有教程都是针对 Rails 5.x 的,cable.js 文件来自 rails 5 时代。 rails 6 带有一个 app/javascripts/consumer.js 文件,你应该删除或移动所有 app/assets/javascripts。

我相信我们不需要包含 jQuery。它已被删除。

【讨论】:

【参考方案3】:

在玩了相当多的 Action cable 之后,我没能找到一个简单的解决方案。我继续前进,只是降级到 Rails 5,一切似乎都运行良好。我知道这不是一个真正的答案,但至少我能够完成这个项目。

【讨论】:

以上是关于Rails 6 - 动作电缆问题的主要内容,如果未能解决你的问题,请参考以下文章

如何关闭动作电缆中的连接?

让动作电缆在 Sidekiq 作业中广播

检测到动作电缆的连接状态

在 Rails 6 中更新底层模型时如何使动作缓存过期?

适用于 Android 的动作电缆客户端

有没有办法在 Rails 6 中禁用动作文本的图像/附件部分?