如何禁用 Rails 应用程序中所有表单的 Hotwire / Turbo(Turbolinks 替代品)?

And*_*son 15 forms ruby-on-rails turbolinks turbo hotwire

在 Rails 7 中,Turbolinks 被 Hotwire / Turbo 取代。这会修补 Web 链接,使它们成为 AJAX 样式的请求,就像 Turbolinks 所做的那样,而且还会修补表单。总的来说,我们发现这破坏了我们应用程序的大部分内容。

  • 已经附加了某种 JS 行为的表单会发生冲突。
  • 标准 Rails 错误处理习惯用法 - “set the flashand render :new/ render :edit” - 令人惊讶的是;必须加上status: :unprocessable_entity并交叉手指。
  • 如果处理表单提交的控制器重定向到包含补丁锚点 ( ...#foo) 的 URL,Turbo 会将其剥离。

最后,只有这么多data: {turbo: false}分散在代码库中才有意义。更糟糕的是,我们使用的是 SimpleForm,所以这变得更加麻烦html: {data: {turbo: false}}

有没有一种方法可以仅对表单全局禁用 Turbo 理想情况下是所有表单,无论其来源如何 - 请仅保留<form>标签和其中的所有内容),但保持其其余行为不变?

Ale*_*lex 14

尽管没有记录,但愿望得以实现。自Turbo v7.2.0 (turbo-rails v1.3.0)起可用。

// app/javascript/application.js

Turbo.setFormMode("on" | "off" | "optin")
Run Code Online (Sandbox Code Playgroud)

"on"-默认- Turbo 始终形成。用于data-turbo="false"禁用单个表单上的涡轮增压。

"off"- 从来没有涡轮形式。data-turbo="true"被忽略。

"optin"- 除非你坚持,否则没有涡轮形式。用于data-turbo="true"在单个表单上启用涡轮。


https://github.com/hotwired/turbo/pull/419

  • 警告:如果您使用“off”,它会禁用所有 Turbo 扩展,而不仅仅是表单的“data-turbo” - 它还会禁用诸如在普通链接上使用“data-turbo-method”之类的功能。我们费了好大劲才发现这一点!在这种情况下,正确的解决方案是“optin”。 (2认同)