form_with 使用嵌套部分呈现 <form></form> 元素之外的表单内容 tables,将内容呈现到 table 行

form_with using a nested partial renders the form contents outside of the <form></form> elements tables, rendering content into a table row

COMPLETE REPRODUCTION APP HERE:

https://github.com/jasonfb/nested-forms-issue1

THIS HAS BEEN SUBMITTED TO THE RAILS TEAM AS A BUG

https://github.com/rails/rails/issues/38919

我在 Rails 6.0.2.2

上看到一些奇怪的行为

我的 haml 代码是这样的,但我也使用 Erb 语法得到这个结果。

// dashboard/skins/edit.js.erb

$(".skins-table tr[data-id=<%= @skin.id %>]").html("<%= j render partial: 'dashboard/skins/edit', locals: {skin: @skin} %>")

// dashboard/skins/_edit.haml


Edit
= skin.name

for
= skin.account.company_name

= form_with do |f|
  = render partial: "form",  locals: {skin: skin, f: f}

// dashboard/skins/_list.haml

Edit
= skin.name

for
= skin.account.company_name

= form_with model: skin, url: edit_dashboard_skin_path(skin) do |f|
  = render partial: "form",  locals: {skin: skin, f: f}

// dashboard/skins/_form.haml

= f.text_field :name
%label
  Skin Name


= f.text_area :header
%label
  Header


= f.text_area :footer
%label
  Footer


= f.text_area :native_scss
%label
  Native SCSS


= f.text_field :background_color
%label
  Background Color

= f.submit "Save", class: "btn btn-primary"

请注意,部分是在表单中呈现的,因此您会期望

<form action="/dashboard/skins/2/edit" accept-charset="UTF-8" data-remote="true" method="post">
   <input type="hidden" name="_method" value="patch">
   <input type="hidden" name="authenticity_token" value="67DBVfnagSrI+DZMxfv/calLBjWq8EV2YFqMDI8oJN/ltqp1jLh3Oa64gZBRhmY25nQUsZEuFK8P/UgCLII8AA==">
   /* other form fields here */
</form>

但是,Rails 似乎正在呈现所有表单内容---包括隐藏字段和我在 form_with do 块中粘贴的任意文本,因为 形式的兄弟姐妹,而不是形式 的 children。

实际情况是这样的:

请注意,本应包含在表单中的输入元素并非如此,它们是同级元素,并且出现在封闭的表单元素下方。

有趣的是,我只在编辑表单中看到这种效果,而在正确显示的创建表单中却看不到这种效果。

已修复!

我的问题是我将一些内容渲染到 table 行 <tr> 内容中,而这些内容没有包含在 <td>

切勿将内容渲染到 <tr> 中而不将该内容包装在 <td>

这个格式错误的内容破坏了表格,使内容超出了表格的范围,如上所述