From ae943de01b687832f6570adf3a26f4df5be96d29 Mon Sep 17 00:00:00 2001 From: geographybuff Date: Thu, 8 Oct 2026 12:38:05 +0000 Subject: [PATCH] Render a blank Add Another Item row after a failed partner request The Add Another Item template rendered _item_request with object: outside locals:. With render partial: ... locals: ..., object: isn't passed as a local, so defined?(object) in the partial was false and fields_for rendered every submitted row into the template. After a failed submit, "Add Another Item" then cloned a copy of the first submitted item. Passing object in locals makes the template hold one blank row again. Resolves #5611 Co-Authored-By: Claude Opus 5.5 --- app/views/partners/requests/new.html.erb | 2 +- spec/requests/partners/requests_spec.rb | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/views/partners/requests/new.html.erb b/app/views/partners/requests/new.html.erb index 1987291dd9..e9ee8aa639 100644 --- a/app/views/partners/requests/new.html.erb +++ b/app/views/partners/requests/new.html.erb @@ -48,7 +48,7 @@
<%= add_element_button('Add Another Item', container_selector: '.fields') do %> - <%= render partial: 'item_request', locals: { form: form, item_units: @item_units }, object: @partner_request.item_requests.build %> + <%= render partial: 'item_request', locals: { form: form, item_units: @item_units, object: @partner_request.item_requests.build } %> <% end %>
diff --git a/spec/requests/partners/requests_spec.rb b/spec/requests/partners/requests_spec.rb index e463bb19ae..1597d5a10b 100644 --- a/spec/requests/partners/requests_spec.rb +++ b/spec/requests/partners/requests_spec.rb @@ -329,6 +329,16 @@ expect(response).to be_unprocessable expect(response.body).to include("Please ensure a single unit is selected for each item") end + + it "renders a single blank row in the Add Another Item template" do + post partners_requests_path, params: request_attributes + + template = Nokogiri::HTML(response.body).at_css('template[data-form-input-target="addTemplate"]') + rows = template.css("tr") + expect(rows.size).to eq(1) + expect(rows.css("option[selected]")).to be_empty + expect(rows.at_css('input[name$="[quantity]"]')["value"]).to be_blank + end end end