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
我在 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>
中
这个格式错误的内容破坏了表格,使内容超出了表格的范围,如上所述
COMPLETE REPRODUCTION APP HERE:
https://github.com/jasonfb/nested-forms-issue1
THIS HAS BEEN SUBMITTED TO THE RAILS TEAM AS A BUG
我在 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>
这个格式错误的内容破坏了表格,使内容超出了表格的范围,如上所述