gpt4 book ai didi

ruby-on-rails - rails 5.2 : form_with requires "local: false" for AJAX requests?

转载 作者:行者123 更新时间:2023-12-04 05:39:46 25 4
gpt4 key购买 nike

我刚刚从 Rails 5.1 升级到 5.2。我对已投入生产几个月没有问题的应用进行了良好的测试覆盖。

我在 Rails 5.1 中使用 form_with 几个月了。 form_with 的默认设置是所有表单默认都是 AJAX,必须指定 local: true 才能有正常的 HTTP POST 请求。

在升级到 Rails 5.2 之后(我遵循了升级指南),我遇到了一些情况,我的一些表单不再作为 AJAX 请求提交,除非我专门向它们添加 local: false .

滚动到代码片段的末尾以查看有效的附加 local: false。代码是直接从应用程序中获取的,没有任何改动。

# This will not work and submits a normal HTTP POST
<%= form_with model: @team_member_type, url: [:settings, @team_member_type], class: "dialog-container", id: "team_member_type-dialog", data: { closable: "false" } do |form| %>

# This will work and submits an AJAX request
<%= form_with model: @team_member_type, url: [:settings, @team_member_type], class: "dialog-container", id: "team_member_type-dialog", data: { closable: "false" }, local: true do |form| %>

当我在没有 local: false 声明的情况下提交表单时,我得到:

Authenticated::Settings::TeamMemberTypesController#create is missing a template for this request format and variant. request.formats: ["text/html"] request.variant: []

同样,我所做的唯一更改是手动将 local: false 添加到表单以强制它是远程的。

文档说 local: false默认值,所以我不必手动指定它。

我在这里错过了什么?

请注意,使用 remote: true 的 AJAX 链接工作正常;默认情况下,只有表单不提交 AJAX。

更新

进行一些挖掘,当我升级到 5.1 时,它看起来可能是一个问题。我找不到 config/initializers/new_framework_defaults_5_1.rb 文件,该文件具有将 form_with 设置为远程的默认标志。因为当我升级到 5.2 时那个文件不存在,所以它没有把那些新的默认配置拉过来。如果我确认确实是问题所在,我会更新这个问题。

更新 2

是的,已确认问题是我没有可以复制这些配置值的 config/new_framework_defaults_5_1.rb 文件。

最佳答案

问题是我没有 Rails 5.1 的升级配置文件,这些文件会复制新的默认设置。 Rails 最终在 5.1(或 5.2?)中删除了它并使用 config.load_defaults VERSION 代替,它将所有升级的配置加载到指定的版本。

一次升级一个版本的危险之一,我从 5.1 升级到 5.2 之间发生了变化!我建议提前阅读所有版本的所有发行说明,而不是一次只阅读一个。

关于ruby-on-rails - rails 5.2 : form_with requires "local: false" for AJAX requests?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50161033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com