我有一个计算器,用户可以在其中输入值,点击提交,无需刷新或重新渲染,计算出的值就会显示在页面上。在我从 Rails 6.1.4.6
升级到 7.0.2.2
之前,一切都运行良好。现在我收到以下错误:
当我将 format.html
添加到 respond_to
block 时,出现此错误:
当我将 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/