aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorLuke Melia <luke@lukemelia.com>2008-06-24 22:50:14 -0400
committerMichael Koziarski <michael@koziarski.com>2008-08-31 19:42:01 +0200
commit7ce03db77884e21256ba8f1615ad8dd841b76b86 (patch)
treee6c957767638217305ac10a910074e57aab70571 /actionpack
parent086c3520c47c6c001b3ddbba8881b4175c433ed1 (diff)
downloadrails-7ce03db77884e21256ba8f1615ad8dd841b76b86.tar.gz
rails-7ce03db77884e21256ba8f1615ad8dd841b76b86.tar.bz2
rails-7ce03db77884e21256ba8f1615ad8dd841b76b86.zip
Fixes optimised named routes generating question mark followed by nothing when provided an empty hash as the last argument.
Signed-off-by: Michael Koziarski <michael@koziarski.com> [#481 state:committed]
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_controller/routing/optimisations.rb5
-rw-r--r--actionpack/test/controller/routing_test.rb6
2 files changed, 9 insertions, 2 deletions
diff --git a/actionpack/lib/action_controller/routing/optimisations.rb b/actionpack/lib/action_controller/routing/optimisations.rb
index 0fe836606c..894d4109e4 100644
--- a/actionpack/lib/action_controller/routing/optimisations.rb
+++ b/actionpack/lib/action_controller/routing/optimisations.rb
@@ -103,9 +103,10 @@ module ActionController
end
# This case uses almost the same code as positional arguments,
- # but add an args.last.to_query on the end
+ # but add a question mark and args.last.to_query on the end,
+ # unless the last arg is empty
def generation_code
- super.insert(-2, '?#{args.last.to_query}')
+ super.insert(-2, '#{\'?\' + args.last.to_query unless args.last.empty?}')
end
# To avoid generating "http://localhost/?host=foo.example.com" we
diff --git a/actionpack/test/controller/routing_test.rb b/actionpack/test/controller/routing_test.rb
index f480e6dbe4..8bb1c49cbd 100644
--- a/actionpack/test/controller/routing_test.rb
+++ b/actionpack/test/controller/routing_test.rb
@@ -1694,6 +1694,12 @@ uses_mocha 'LegacyRouteSet, Route, RouteSet and RouteLoading' do
controller.send(:multi_url, 7, "hello", 5, :baz => "bar")
end
+ def test_named_route_url_method_with_ordered_parameters_and_empty_hash
+ controller = setup_named_route_test
+ assert_equal "http://named.route.test/people/go/7/hello/joe/5",
+ controller.send(:multi_url, 7, "hello", 5, {})
+ end
+
def test_named_route_url_method_with_no_positional_arguments
controller = setup_named_route_test
assert_equal "http://named.route.test/people?baz=bar",