Fix url_for method's behavior when it is called with :controller option which starts with "/" from multiple nested controller.
Closes #3864
This commit is contained in:
parent
af7dafff81
commit
837231a829
@ -482,7 +482,7 @@ def normalize_controller_action_id!
|
||||
# if the current controller is "foo/bar/baz" and :controller => "baz/bat"
|
||||
# is specified, the controller becomes "foo/baz/bat"
|
||||
def use_relative_controller!
|
||||
if !named_route && different_controller?
|
||||
if !named_route && different_controller? && !controller.start_with?("/")
|
||||
old_parts = current_controller.split('/')
|
||||
size = controller.count("/") + 1
|
||||
parts = old_parts[0...-size] << controller
|
||||
|
@ -2562,3 +2562,36 @@ def app; Routes end
|
||||
assert_equal "200", @response.code
|
||||
end
|
||||
end
|
||||
|
||||
class TestMultipleNestedController < ActionDispatch::IntegrationTest
|
||||
module ::Foo
|
||||
module Bar
|
||||
class BazController < ActionController::Base
|
||||
def index
|
||||
render :inline => "<%= url_for :controller => '/pooh', :action => 'index' %>"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Routes = ActionDispatch::Routing::RouteSet.new.tap do |app|
|
||||
app.draw do
|
||||
namespace :foo do
|
||||
namespace :bar do
|
||||
match "baz" => "baz#index"
|
||||
end
|
||||
end
|
||||
match "pooh" => "pooh#index"
|
||||
end
|
||||
end
|
||||
|
||||
include Routes.url_helpers
|
||||
def app; Routes end
|
||||
|
||||
test "controller option which starts with '/' from multiple nested controller" do
|
||||
get "/foo/bar/baz"
|
||||
assert_equal "/pooh", @response.body
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user