Rails 5.1.2:
我正在尝试使用form_with创建一个与Rails documentation和this 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中,因为我发布的第一个链接表明它应该,以及如何让它出现?
答案 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。