From 41e41360bb418b4f09c4477f2fcebafae4676f14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Mendon=C3=A7a=20Fran=C3=A7a?= Date: Mon, 15 Nov 2021 23:23:44 +0000 Subject: [PATCH] Remove code duplication by extracting the _object_for_form_builder private method --- actionview/lib/action_view/helpers/form_helper.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/actionview/lib/action_view/helpers/form_helper.rb b/actionview/lib/action_view/helpers/form_helper.rb index ac6fc54b023ca..e6fdd19ca4c9a 100644 --- a/actionview/lib/action_view/helpers/form_helper.rb +++ b/actionview/lib/action_view/helpers/form_helper.rb @@ -439,7 +439,7 @@ def form_for(record, options = {}, &block) object_name = record object = nil else - object = record.is_a?(Array) ? record.last : record + object = _object_for_form_builder(record) raise ArgumentError, "First argument in form cannot contain nil or be empty" unless object object_name = options[:as] || model_name_from_record_or_class(object).param_key apply_form_for_options!(record, object, options) @@ -765,7 +765,7 @@ def form_with(model: nil, scope: nil, url: nil, format: nil, **options, &block) url ||= polymorphic_path(model, format: format) end - model = model.last if model.is_a?(Array) + model = _object_for_form_builder(model) scope ||= model_name_from_record_or_class(model).param_key end @@ -1078,7 +1078,7 @@ def fields(scope = nil, model: nil, **options, &block) options[:skip_default_ids] = !form_with_generates_ids if model - model = model.last if model.is_a?(Array) + model = _object_for_form_builder(model) scope ||= model_name_from_record_or_class(model).param_key end @@ -1568,6 +1568,10 @@ def range_field(object_name, method, options = {}) Tags::RangeField.new(object_name, method, self, options).render end + def _object_for_form_builder(object) # :nodoc: + object.is_a?(Array) ? object.last : object + end + private def html_options_for_form_with(url_for_options = nil, model = nil, html: {}, local: !form_with_generates_remote_forms, skip_enforcing_utf8: nil, **options) @@ -2278,7 +2282,7 @@ def fields_for(record_name, record_object = nil, fields_options = {}, &block) return fields_for_with_nested_attributes(record_name, record_object, fields_options, block) end else - record_object = record_name.is_a?(Array) ? record_name.last : record_name + record_object = @template._object_for_form_builder(record_name) record_name = model_name_from_record_or_class(record_object).param_key end