From 5600776e309b9c84f0cc075391b6130d07d83cfd Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Wed, 6 Jun 2007 16:52:37 +0000 Subject: Fix incomplete work from [6951] that was hidden by test stubs. Closes #6432. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6959 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_view/helpers/form_helper.rb | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'actionpack/lib/action_view/helpers/form_helper.rb') 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('', 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 -- cgit v1.2.3