@@ -439,7 +439,7 @@ def form_for(record, options = {}, &block)
439
439
object_name = record
440
440
object = nil
441
441
else
442
- object = record . is_a? ( Array ) ? record . last : record
442
+ object = _object_for_form_builder ( record )
443
443
raise ArgumentError , "First argument in form cannot contain nil or be empty" unless object
444
444
object_name = options [ :as ] || model_name_from_record_or_class ( object ) . param_key
445
445
apply_form_for_options! ( record , object , options )
@@ -765,7 +765,7 @@ def form_with(model: nil, scope: nil, url: nil, format: nil, **options, &block)
765
765
url ||= polymorphic_path ( model , format : format )
766
766
end
767
767
768
- model = model . last if model . is_a? ( Array )
768
+ model = _object_for_form_builder ( model )
769
769
scope ||= model_name_from_record_or_class ( model ) . param_key
770
770
end
771
771
@@ -1078,7 +1078,7 @@ def fields(scope = nil, model: nil, **options, &block)
1078
1078
options [ :skip_default_ids ] = !form_with_generates_ids
1079
1079
1080
1080
if model
1081
- model = model . last if model . is_a? ( Array )
1081
+ model = _object_for_form_builder ( model )
1082
1082
scope ||= model_name_from_record_or_class ( model ) . param_key
1083
1083
end
1084
1084
@@ -1568,6 +1568,10 @@ def range_field(object_name, method, options = {})
1568
1568
Tags ::RangeField . new ( object_name , method , self , options ) . render
1569
1569
end
1570
1570
1571
+ def _object_for_form_builder ( object ) # :nodoc:
1572
+ object . is_a? ( Array ) ? object . last : object
1573
+ end
1574
+
1571
1575
private
1572
1576
def html_options_for_form_with ( url_for_options = nil , model = nil , html : { } , local : !form_with_generates_remote_forms ,
1573
1577
skip_enforcing_utf8 : nil , **options )
@@ -2278,7 +2282,7 @@ def fields_for(record_name, record_object = nil, fields_options = {}, &block)
2278
2282
return fields_for_with_nested_attributes ( record_name , record_object , fields_options , block )
2279
2283
end
2280
2284
else
2281
- record_object = record_name . is_a? ( Array ) ? record_name . last : record_name
2285
+ record_object = @template . _object_for_form_builder ( record_name )
2282
2286
record_name = model_name_from_record_or_class ( record_object ) . param_key
2283
2287
end
2284
2288
0 commit comments