Skip to content
Browse files

Fix named routing regression from 3.2.13

When named route that is nested is used in 3.2.13

Example `routes.rb`:

```
resources :nested do
  resources :builder, :controller => 'nested/builder'
end
```

In 3.2.12 and 3.2.12 this named route would work:

```
nested_builder_path(:last_step, :nested_id => "foo")
```

Generating a url that looks like `/nested/foo/builder/last_step`. This PR fixes the regression when building urls via the optimized helper. Any explicit keys set in the options are removed from the list of implicitly mapped keys.

Not sure if this is exactly how the original version worked, but this fixes this use case regression.
  • Loading branch information...
1 parent 14f9086 commit 6167d76d9a9f990cfd03b85a87e3a7439281f7c2 @schneems schneems committed with rafaelfranca May 16, 2013
View
1 actionpack/lib/action_dispatch/routing/route_set.rb
@@ -218,6 +218,7 @@ def handle_positional_args(t, args, options, keys)
keys -= t.url_options.keys if t.respond_to?(:url_options)
keys -= options.keys
end
+ keys -= inner_options.keys
result.merge!(Hash[keys.zip(args)])
end
View
11 actionpack/test/dispatch/routing/route_set_test.rb
@@ -69,6 +69,17 @@ def call(env)
end
end
+ test "explicit keys win over implicit keys" do
+ draw do
+ resources :foo do
+ resources :bar, to: SimpleApp.new('foo#show')
+ end
+ end
+
+ assert_equal '/foo/1/bar/2', url_helpers.foo_bar_path(1, 2)
+ assert_equal '/foo/1/bar/2', url_helpers.foo_bar_path(2, foo_id: 1)
+ end
+
private
def clear!
@set.clear!

0 comments on commit 6167d76

Please sign in to comment.
Something went wrong with that request. Please try again.