Forms Rails 5.2.0-默认情况下,scaffold`form_with`includes`local:true`

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

当我搭建Rails 5.2.0应用程序时,我的搭建表单总是使用
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| %>