ПОЛНОЕ РЕПРОДУКЦИОННОЕ ПРИЛОЖЕНИЕ ЗДЕСЬ:
https://github.com/jasonfb/nested-forms-issue1
ЭТО БЫЛО ПРЕДСТАВЛЕНО ЖЕЛЕЗНОДОРОЖНОЙ КОМАНДЕ КАК ЖУК
https://github.com/rails/rails/issues/38919
Я вижу странное поведение на Rails 6.0.2.2
Мой код хамла такой, но я также получаю этот результат, используя синтаксис Erb .
// панель инструментов / скины / правка. js .erb
$(".skins-table tr[data-id=<%= @skin.id %>]").html("<%= j render partial: 'dashboard/skins/edit', locals: {skin: @skin} %>")
// панель инструментов / скины / _edit.haml
Edit
= skin.name
for
= skin.account.company_name
= form_with do |f|
= render partial: "form", locals: {skin: skin, f: f}
// панель инструментов /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, как братья и сестры формы, а не потомки форма .
На самом деле происходит следующее:
Обратите внимание, что входные элементы, которые должны быть внутри формы, не являются, они братья и сестры и появляются под закрытым элементом формы.
Что интересно, я вижу этот эффект только для формы редактирования, а не для формы создания, которая отображается правильно.