diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 5923f0c6f8..081abbd11a 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Arrays sent via multipart posts are converted to strings #1032 [dj@omelia.org] + * render(:layout => true) is a synonym for render(:layout => nil) * Make sure the benchmarking render method always returns the output of the render. diff --git a/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb b/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb index 0884d0ab89..59439cf8e5 100755 --- a/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb +++ b/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb @@ -69,7 +69,7 @@ class CGIMethods #:nodoc: # Value as part of a multipart request value.read elsif value.class == Array - value + value.collect { | e | e.respond_to?(:read) ? e.read : e } else # Standard value (not a multipart request) value.to_s diff --git a/actionpack/test/controller/cgi_test.rb b/actionpack/test/controller/cgi_test.rb index dbdf6a5b96..f0058d2bf8 100755 --- a/actionpack/test/controller/cgi_test.rb +++ b/actionpack/test/controller/cgi_test.rb @@ -94,12 +94,16 @@ class CGITest < Test::Unit::TestCase input = { "something" => [ StringIO.new("") ], + "array_of_stringios" => [[ StringIO.new("One"), StringIO.new("Two") ]], + "mixed_types_array" => [[ StringIO.new("Three"), "NotStringIO" ]], "products[string]" => [ StringIO.new("Apple Computer") ], "products[file]" => [ mock_file ] } expected_output = { "something" => "", + "array_of_stringios" => ["One", "Two"], + "mixed_types_array" => [ "Three", "NotStringIO" ], "products" => { "string" => "Apple Computer", "file" => mock_file @@ -169,3 +173,4 @@ class CGITest < Test::Unit::TestCase assert_equal expected, CGIMethods.parse_request_parameters(input) end end +