aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/CHANGELOG5
-rw-r--r--actionpack/lib/action_controller/url_rewriter.rb7
-rw-r--r--actionpack/test/controller/url_test.rb13
3 files changed, 23 insertions, 2 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index 2923232021..69075f04db 100644
--- a/actionpack/CHANGELOG
+++ b/actionpack/CHANGELOG
@@ -1,5 +1,10 @@
*SVN*
+* Added arrays as a value option for params in url_for and friends #467 [Eric Anderson]. Example:
+
+ url_for(:controller => 'user', :action => 'delete', :params => { 'username' => %( paul john steve ) } )
+ # => /user/delete?username[]=paul&username[]=john&username[]=steve
+
* Fixed that controller tests can now assert on the use of cookies #466 [Alexey]
* Fixed that send_file would "remember" all the files sent by adding to the headers again and again #458 [bitsweat]
diff --git a/actionpack/lib/action_controller/url_rewriter.rb b/actionpack/lib/action_controller/url_rewriter.rb
index 7bf9015b37..fa003119ec 100644
--- a/actionpack/lib/action_controller/url_rewriter.rb
+++ b/actionpack/lib/action_controller/url_rewriter.rb
@@ -174,7 +174,12 @@ module ActionController
elements = []
query_string = ""
- hash.each { |key, value| elements << "#{CGI.escape(key)}=#{CGI.escape(value.to_s)}" }
+ hash.each do |key, value|
+ key = CGI.escape key
+ key += '[]' if value.class == Array
+ value = [ value ] unless value.class == Array
+ value.each { |val| elements << "#{key}=#{CGI.escape(val.to_s)}" }
+ end
unless elements.empty? then query_string << ("?" + elements.join("&")) end
return query_string
diff --git a/actionpack/test/controller/url_test.rb b/actionpack/test/controller/url_test.rb
index b595b1c25c..8315830776 100644
--- a/actionpack/test/controller/url_test.rb
+++ b/actionpack/test/controller/url_test.rb
@@ -246,7 +246,18 @@ class UrlTest < Test::Unit::TestCase
)
end
end
-
+
+ def test_parameters_with_array
+ @clean_urls.each do |url|
+ assert_equal(
+ "http://www.singlefile.com/identity/show?id[]=3&id[]=5&id[]=10",
+ url.rewrite(
+ :action => "show",
+ :params => { 'id' => [ 3, 5, 10 ] } )
+ )
+ end
+ end
+
def test_action_with_id
assert_equal(
"http://www.singlefile.com/identity/show/7",