1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Allow an absolute controller path inside a module scope

Fixes #12777
This commit is contained in:
Andrew White 2014-01-05 19:58:04 +00:00
parent a1564d470d
commit 3a48b83e5e
4 changed files with 24 additions and 2 deletions

View file

@ -1,3 +1,7 @@
* Allow an absolute controller path inside a module scope
Fixes #12777
* Unique the segment keys array for non-optimized url helpers
In Rails 3.2 you only needed pass an argument for dynamic segment once so

View file

@ -218,8 +218,12 @@ module ActionDispatch
controller ||= default_controller
action ||= default_action
unless controller.is_a?(Regexp)
controller = [@scope[:module], controller].compact.join("/").presence
if @scope[:module] && !controller.is_a?(Regexp)
if controller =~ %r{\A/}
controller = controller[1..-1]
else
controller = [@scope[:module], controller].compact.join("/").presence
end
end
if controller.is_a?(String) && controller =~ %r{\A/}

View file

@ -2882,6 +2882,18 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
assert_equal '/downloads/1/1.tar', download_path('1', '1')
end
def test_absolute_controller_namespace
draw do
namespace :foo do
get '/', to: '/bar#index', as: 'root'
end
end
get '/foo'
assert_equal 'bar#index', @response.body
assert_equal '/foo', foo_root_path
end
private
def draw(&block)

View file

@ -239,6 +239,8 @@ In each of these cases, the named routes remain the same as if you did not use `
| PATCH/PUT | /admin/posts/:id | posts#update | post_path(:id) |
| DELETE | /admin/posts/:id | posts#destroy | post_path(:id) |
TIP: _If you need to use a different controller namespace inside a `namespace` block you can specify an absolute controller path, e.g: `get '/foo' => '/foo#index'`._
### Nested Resources
It's common to have resources that are logically children of other resources. For example, suppose your application includes these models: