Forms Rails 5.2.0-默认情况下,scaffold`form_with`includes`local:true`
当我搭建Rails 5.2.0应用程序时,我的搭建表单总是使用Forms Rails 5.2.0-默认情况下,scaffold`form_with`includes`local:true`,forms,ruby-on-rails-5,Forms,Ruby On Rails 5,当我搭建Rails 5.2.0应用程序时,我的搭建表单总是使用local:true选项生成,该选项包含在form\u中,并带有 railsgscaffold文章标题:string 生成的脚手架表单 禁止保存此文章: 生成的HTML 请注意缺少数据远程属性 文档 我认为Rails 5.1.2+中带有的form_的默认设置是使用带有数据远程属性的远程AJAX/xhr请求?换句话说,不包括local:true选项 见: 默认情况下,如果使用了不引人注目的JavaScript驱动程序(如r
local:true
选项生成,该选项包含在form\u中,并带有
railsgscaffold文章标题:string
生成的脚手架表单
禁止保存此文章:
生成的HTML
请注意缺少数据远程
属性
文档
我认为Rails 5.1.2+中带有的form_的默认设置是使用带有数据远程
属性的远程AJAX/xhr请求?换句话说,不包括local:true
选项
见:
默认情况下,如果使用了不引人注目的JavaScript驱动程序(如rails ujs),form_会在后台通过XMLHTTPRequest附加数据远程属性提交表单。有关更多信息,请参见:本地选项
注意-rails-ujs
gem在5.2.0中被移动到rails本身。因此,我似乎不需要向gemfile添加任何内容来启用默认的form_和
行为
故障排除
我确实使用了一个.railsrc
和一个rails模板文件来定制我的rails new
脚手架。然而,我已经尝试禁用和删除这两个文件,但仍然从新的搭建的应用程序中获得相同的结果。我想我找到了答案-而且很简单:)-5.2.0的Rails搭建模板明确地包含了local:true
选项
5.2.0表格模板
所以我想他们想要local:true
作为脚手架的默认模板。也许是为了简单
查找脚手架生成器模板的步骤
感谢这篇文章帮助您找到来源:
- 使用
gem environment
命令查找您的宝石所在的位置
- 我使用rbenv,所以我的位于
~/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems
cd
进入该文件并查找railties-5.2.0
- 搜索
rails/generators/scaffold/templates
,或者只搜索local:true
- 下面是路径:
~/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/railties-5.2.0/lib/rails/generators/erb/scaffold/templates/_form.html.erb.tt
我想我找到了答案-而且很简单:)-5.2.0的Rails脚手架模板明确地包含了local:true
选项
5.2.0表格模板
所以我想他们想要local:true
作为脚手架的默认模板。也许是为了简单
查找脚手架生成器模板的步骤
感谢这篇文章帮助您找到来源:
- 使用
gem environment
命令查找您的宝石所在的位置
- 我使用rbenv,所以我的位于
~/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems
cd
进入该文件并查找railties-5.2.0
- 搜索
rails/generators/scaffold/templates
,或者只搜索local:true
- 下面是路径:
~/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/railties-5.2.0/lib/rails/generators/erb/scaffold/templates/_form.html.erb.tt
为了根据我的评论给出更完整的答案,下面介绍如何添加模板,以自定义Rails在使用scaffold生成器时生成的部分表单。我在这里假设您使用的是ERB,但是如果您使用类似slim rails的东西来定制视图生成器,则过程类似
在Rails项目中创建一个文件:lib/templates/erb/scaffold/\u form.html.erb.tt
对于这个新文件的内容,最好从现有模板中的内容开始。您可以使用gem which rails
查找在当前环境中定义rails的文件(其结果类似于/home/.rvm/gems/ruby-2.5.0@/gems/railties-5.2.0/lib/rails.rb
),从中可以在railties-5.2.0/lib/rails/generators/erb/scaffold/templates/\u form.html.erb.tt
中找到表单模板。将该文件的内容复制到新的生成器模板中
尝试对新模板文件进行一些更改,然后运行rails脚手架生成器(rails g scaffold foo…
)。您应该可以在生成器创建的\u form.html.erb
文件中看到您的更改
请记住,此模板是“双嵌套”ERB,这意味着它第一次使用ERB进行处理以生成局部视图,然后每次Rails应用程序使用它提供请求时都再次进行处理。也就是说,做一个简单的更改,比如从你的新模板中删除local:true
,通常不太容易让人动心
有关自定义Rails生成器的详细信息,请访问。要根据我的评论给出更完整的答案,下面介绍如何添加模板以自定义Rails在使用脚手架生成器时生成的部分表单。我在这里假设您使用的是ERB,但是如果您使用类似slim rails的东西来定制视图生成器,则过程类似
在Rails项目中创建一个文件:lib/templates/erb/scaffold/\u form.html.erb.tt
对于这个新文件的内容,最好从现有模板中的内容开始。您可以使用gem which rails
查找在当前环境中定义rails的文件(其结果类似于/home/.rvm/gems/ruby-2.5.0@/gems/railties-5.2.0/lib/rails.rb
),从中可以在railties-5.2.0/lib/rails/generators/erb/scaffold/templates/\u form.html.erb.tt
中找到表单模板。将该文件的内容复制到新的生成器模板中
尝试对新模板文件进行一些更改,然后运行rails脚手架生成器(rails g scaffold foo…<%= 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">
<%%= form_with(model: <%= model_resource_name %>, local: true) do |form| %>