ruby-on-rails - Rails 7 升级后的 ActionController::UnknownFormat

标签 ruby-on-rails ruby-on-rails-7

我有一个计算器,用户可以在其中输入值,点击提交,无需刷新或重新渲染,计算出的值就会显示在页面上。在我从 Rails 6.1.4.6 升级到 7.0.2.2 之前,一切都运行良好。现在我收到以下错误:

enter image description here

当我将 format.html 添加到 respond_to block 时,出现此错误:

enter image description here

当我将 format.html { render :new } 添加到 respond_to block 时,页面重新呈现 new.html.erb 文件但没有计算值(即 create.js.erb 文件未运行)。

如有任何帮助,我们将不胜感激。

以下是在 Rails 6 中完美运行的文件。

计算器 Controller .rb

def create
  @calculation = calculate_one_option

  respond_to do |format|
    format.js
  end
end

def new; end

new.html.erb

<%= form_tag calculate_path, method: :post, remote: true do %>
  ... form stuff ...
  <%= submit_tag "Calculate" %>
<% end %>

创建.js.erb

var formatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' });

if ("<%= @calculation.error %>".length > 0 ) {
  alert("<%= @calculation.error %>");
  ... js stuff ...
} else {
  ... more js stuff ...
}

最佳答案

在 Rails 7 中,Turbo 处理这种行为。

如果你想规避这个默认,你可以添加

Turbo.session.drive = false

在给定的链接或表单上作为属性。

或者您可以将同一行添加到全局 javascript 文件,例如 application.js。

import { Turbo } from "@hotwired/turbo-rails"
Turbo.session.drive = false

参见 Turbo 指南 here .

或者,如果在此项目中根本不使用 Turbo 和 Hotwire,并且您不想要额外的 gem 依赖项,则可以完全删除 Hotwire gem。这可以通过以下方式完成 this Stack Overflow answer

关于ruby-on-rails - Rails 7 升级后的 ActionController::UnknownFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71345402/

相关文章:

javascript - 添加新路径后图像不显示

ruby-on-rails - PG::ConnectionBad FATAL:角色 "Myname"不存在

javascript - 如何在 Backbone View 中访问 Rails 配置信息?

ruby-on-rails - Rails - 错误部分未渲染

html - 无法让 tailwindcss 网格在使用 --css tailwind 标志生成的 Rails 7 元素中工作

mysql - Carrierwave 多文件上传 Rails 5 不工作

ruby-on-rails - 有什么方法可以查看哪条路线与 Rails 中浏览器的请求相匹配?

ruby-on-rails - Rails 7 - has_many_attached 加载新附件时删除旧附件

ruby-on-rails - [7.1]在迁移中意味着什么

javascript - 如何在 Rails 7 中将 clipboard.js 与 importmap 一起使用