Rails 5.1.2 - form_with在html中没有显示data-remote =“true”

时间:2017-07-20 17:47:01

标签: ruby-on-rails ajax forms

Rails 5.1.2:

我正在尝试使用form_with创建一个与Rails documentationthis GitHub thread一致的AJAX表单。

此代码:

<%= form_with url: '/' do |f| %>
<% end %>

实际上这段代码:

<%= form_with url: '/', remote: true do |f| %>
<% end %>

都生成这个html:

<form action="/" accept-charset="UTF-8" method="post">
  <input name="utf8" type="hidden" value="..." />
  <input type="hidden" name="authenticity_token" value="..." />
</form>

为什么data-remote="true"没有出现在HTML中,因为我发布的第一个链接表明它应该,以及如何让它出现?

5 个答案:

答案 0 :(得分:7)

data-remote的默认值由选项Rails.application.config.action_view.form_with_generates_remote_forms配置。默认情况下,在Rails 5中,此选项为true。通过所有项目搜索,似乎您从Rails 4或smth迁移。否则覆盖此选项。

答案 1 :(得分:3)

Rails 5.1.2 中默认情况下,form_with假定您的表单将使用Ajax。您可以通过在:local中传递form_with选项来选择退出此行为。

<%= form_with url: '/' do |f| %>
<% end %>

以上代码生成

<form action="/" accept-charset="UTF-8" data-remote="true" method="post">
  <input name="utf8" type="hidden" value="..." />
  <input type="hidden" name="authenticity_token" value="..." />
</form>

此外,如果您想使用不带ajax的表单,可以使用以下方式 -

<%= form_with url: '/', local: true do |f| %>
<% end %>

答案 2 :(得分:3)

我在使用Rails 5.1.4应用程序时遇到了同样的问题。使用local: false解决了问题。

<%= form_with url: '/', local: false do |f| %>
<% end %>

答案 3 :(得分:3)

对我来说,将这两行添加到config/application.rb可以解决问题:

# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 5.2

答案 4 :(得分:0)

它将在Rails 5.1中发生

我的配置在new_framework_defaults_5_1.rb中,如下所示:

# Make `form_with` generate non-remote forms.
Rails.application.config.action_view.form_with_generates_remote_forms = false

在我的视图文件中,我使用的是这样的:

= form_with(model: your_model , url: your_path, method: :post, local: false) do |f|
....your input here...

现在你的html代码将在你的表单中生成data-remote:true。