【发布时间】:2018-11-05 17:18:18
【问题描述】:
当我为 Rails 5.2.0 应用搭建脚手架时,我的脚手架表单总是使用form_with 中包含的local: true 选项生成。
rails g scaffold Article title:string
生成的脚手架形式
<%= form_with(model: article, local: true) do |form| %>
<% if article.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(article.errors.count, "error") %> prohibited this article from being saved:</h2>
<ul>
<% article.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
生成的 HTML
<form action="/articles/1" accept-charset="UTF-8" method="post">
注意缺少data-remote属性
文档
我认为 Rails 5.1.2+ 中 form_with 的默认设置是使用带有 data-remote 属性的远程 AJAX / xhr 请求?换句话说,不要包含local: true 选项。
见:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_with
如果使用不显眼的 JavaScript 驱动程序(如 rails-ujs),默认情况下 form_with 会附加 data-remote 属性,通过 XMLHTTPRequest 在后台提交表单。有关更多信息,请参阅 :local 选项。
注意 - rails-ujsgem 在 5.2.0 中被移入 Rails 本身 - https://github.com/rails/rails-ujs。所以看起来我不需要向 gemfile 添加任何东西来启用默认的form_with 行为。
疑难解答
我确实使用.railsrc 和rails 模板文件来定制我的rails new 脚手架。但是,我已尝试禁用和删除这两个文件,但仍然从新的脚手架应用程序中获得相同的结果。
【问题讨论】:
-
form_with默认包含remote:true。如果您不想通过 JS 提出请求,可以添加remote: false。此外,form_with是处理表单的“新”rails 方式。 -
感谢@Horacio 的帮助。但是这个问题是针对脚手架生成的表格,而不是手动生成的。我发现用于脚手架表单的模板在
form_with上明确使用了local: true选项(见下文)。
标签: forms ruby-on-rails-5