0

我刚加入这个社区,这是我的第一篇文章。

我一直在关注几个 Hotwire 教程,并使用该技术构建了一些原型。与 JS 前端框架相比,以更少的复杂性获得类似 SPA 的响应是多么容易,这给我留下了深刻的印象。

然而,我发现当我尝试将代码和流程从我的原型转换到我现有的 Rails 项目时,它根本无法正常工作。更糟糕的是我不知道为什么。

我尝试使用以下一般过程编写一些跟踪代码:

  1. 包括 Hotwire gem
  2. 通过终端命令安装 Hotwire
  3. 包括来自相关模型的广播
  4. 在视图级别应用 turbo_stream_from 标记作为侦听器
  5. 在您希望更新模型数据的位置包含一个 turbo_frame_tag

这在我的原型中可靠地工作,但在我现有的项目中不起作用。我怀疑这可能是因为我现有的项目没有使用最新版本的 Rails 或 Ruby?(升级也不是一件容易的事。)我目前使用的是 Ruby 2.7.1 版和 Rails 6.0.2 版。

我知道我应该提供一些我的项目代码,但我什至不知道从哪里开始。如果有人能够为我提供一些指导,我将不胜感激。谢谢!

编辑:如果它有帮助,那么这些是我在尝试让 Hotwire 自动更新索引页面上的模型实例列表时收到的终端消息类型。似乎广播正在工作,但我的听众却没有?

提交数据库更改时的终端消息

故事索引页面

故事部分中的代码

我的故事模型中的代码

编辑:通过 Chrome 开发工具的 HTML 源代码

4

2 回答 2

1

想到的一件事是<turbo-frame-tag>您的流响应内部有一个,这是为什么呢?我不确定这是否是它不起作用的原因,但查看他们的示例,流模板不应包含帧标签,它应该是这样的:

<turbo-stream action="append" target="dom_id">
    <template>
         Content to append to container designated with the dom_id.
    </template>
</turbo-stream>

您确定页面上有一些 id="stories" 的 div 吗?那是流正在寻找要附加到的元素;如果它找不到一个,什么都不会发生。

于 2021-05-18T06:47:38.987 回答
0

我想回到这篇文章报告我没有找到解决方案。尽管花费了超过一周的全职时间来尝试调试此问题。

最后,使用最新版本的 Ruby、Rails 和所有 gem 开始一个新的 repo 变得更快、更容易。我继续简单地将尽可能多的代码复制并粘贴到新的存储库中。除此之外,我使用终端命令追溯了我的步骤,基本上创建了原始应用程序的克隆。

瞧,它起作用了。

新应用程序使用 Ruby 3.0.1 版和 Rails 6.1.3.2 版。该应用程序的旧版本(不工作的版本)在 Ruby 版本 2.7.1 和 Rails 版本 6.0.2.2 上运行。

感谢所有在这件事上伸出援手来帮助我的人。

于 2021-05-23T06:37:32.697 回答