diff options
Diffstat (limited to 'actionpack/lib/action_view/helpers')
-rw-r--r-- | actionpack/lib/action_view/helpers/form_helper.rb | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/actionpack/lib/action_view/helpers/form_helper.rb b/actionpack/lib/action_view/helpers/form_helper.rb index 1a4aa0ca05..1886c7ab15 100644 --- a/actionpack/lib/action_view/helpers/form_helper.rb +++ b/actionpack/lib/action_view/helpers/form_helper.rb @@ -155,23 +155,24 @@ module ActionView # end # # If you don't need to attach a form to a model instance, then check out FormTagHelper#form_tag. - def form_for(record_or_name, *args, &proc) + def form_for(record_or_name_or_array, *args, &proc) raise ArgumentError, "Missing block" unless block_given? options = args.last.is_a?(Hash) ? args.pop : {} - case record_or_name + case record_or_name_or_array when String, Symbol - object_name = record_or_name + object_name = record_or_name_or_array when Array - object = record_or_name.last + object = record_or_name_or_array.last object_name = ActionController::RecordIdentifier.singular_class_name(object) - apply_form_for_options!(object, options, *record_or_name) + # apply_form_for_options!(object, options, *record_or_name_or_array) + apply_form_for_options!(record_or_name_or_array, options) args.unshift object else - object = record_or_name + object = record_or_name_or_array object_name = ActionController::RecordIdentifier.singular_class_name(object) - apply_form_for_options!(object, options) + apply_form_for_options!([ object ], options) args.unshift object end @@ -180,7 +181,9 @@ module ActionView concat('</form>', proc.binding) end - def apply_form_for_options!(object, options, *nested_objects) #:nodoc: + def apply_form_for_options!(object_or_array, options) #:nodoc: + object = object_or_array.is_a?(Array) ? object_or_array.last : object_or_array + html_options = if object.respond_to?(:new_record?) && object.new_record? { :class => dom_class(object, :new), :id => dom_id(object), :method => :post } @@ -190,7 +193,7 @@ module ActionView options[:html] ||= {} options[:html].reverse_merge!(html_options) - options[:url] ||= polymorphic_path(object, *nested_objects) + options[:url] ||= polymorphic_path(object_or_array) end # Creates a scope around a specific model object like form_for, but doesn't create the form tags themselves. This makes |