当我使用Rails 5.2.0应用程序时,我的脚手架表单始终使用local: true
中包含的form_with
选项生成。
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 %>
<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
默认情况下,如果使用了诸如rails-ujs之类的Unobtrusive JavaScript驱动程序,form_with会附加通过XMLHTTPRequest在后台提交表单的data-remote属性。请参阅:local选项了解更多信息。
注意 - rails-ujs
gem已在5.2.0 - https://github.com/rails/rails-ujs中移入Rails。所以看起来我不需要在gemfile中添加任何内容来启用默认的form_with
行为。
我使用.railsrc
和rails模板文件来自定义我的rails new
脚手架。但是,我试过禁用&amp;删除这两个文件仍然可以从新的脚手架应用程序获得相同的结果。
答案 0 :(得分:2)
根据我的评论提供更完整的答案,这里是如何添加模板以自定义使用脚手架生成器时由Rails生成的表单部分。我在此假设您正在使用ERB,但如果您使用slim-rails之类的东西来自定义视图生成器,则此过程类似。
在Rails项目中创建一个文件:lib/templates/erb/scaffold/_form.html.erb.tt
对于这个新文件的内容,一个好的起点是现有模板中的内容。您可以使用gem which rails
找到在当前环境中定义Rails的文件(结果如/home/<user>/.rvm/gems/ruby-2.5.0@<gemset>/gems/railties-5.2.0/lib/rails.rb
),然后您可以在railties-5.2.0/lib/rails/generators/erb/scaffold/templates/_form.html.erb.tt
找到表单模板。将该文件的内容复制到新的生成器模板中。
尝试对新模板文件进行一些更改,然后运行rails scaffold generator(rails g scaffold foo ...
)。您应该看到您的更改反映在生成器创建的_form.html.erb
文件中。
请记住,此模板是双重嵌套的&#39; ERB,意味着它是第一次使用ERB处理以生成视图部分,然后每当您的Rails应用程序向其发出请求时再次处理。也就是说,通常不会进行简单的更改,例如从新模板中删除local: true
有关自定义Rails生成器的深入信息,请访问RailsGuides。
答案 1 :(得分:0)
认为我找到了答案 - 这很简单:) - 5.2.0的Rails脚手架模板明确包含cryptonite
选项。
local: true
所以我猜他们希望<%%= form_with(model: <%= model_resource_name %>, local: true) do |form| %>
作为支架的默认模板。可能为了简单起见?
感谢此帖有助于查找来源:Override Rails scaffold generator
local: true
命令gem enviornment
~/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems
到该文件中并查找cd
railties-5.2.0
中搜索,或只搜索rails/generators/scaffold/templates
local: true