Router accepts member routes on resource. [#4624 state:resolved]

This commit is contained in:
Rizwan Reza
2010-06-06 14:00:09 +04:30
committed by Jeremy Kemper
parent 83729e2fe3
commit ac9f8e1b7b
2 changed files with 27 additions and 5 deletions

View File

@@ -622,13 +622,22 @@ module ActionDispatch
end
def member
unless @scope[:scope_level] == :resources
raise ArgumentError, "can't use member outside resources scope"
unless [:resources, :resource].include?(@scope[:scope_level])
raise ArgumentError, "You can't use member action outside resources and resource scope."
end
with_scope_level(:member) do
scope(':id', :name_prefix => parent_resource.member_name, :as => "") do
yield
case @scope[:scope_level]
when :resources
with_scope_level(:member) do
scope(':id', :name_prefix => parent_resource.member_name, :as => "") do
yield
end
end
when :resource
with_scope_level(:member) do
scope(':id', :as => "") do
yield
end
end
end
end

View File

@@ -28,6 +28,10 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
post :reset
resource :info
member do
get :crush
end
end
match 'account/logout' => redirect("/logout"), :as => :logout_redirect
@@ -352,6 +356,15 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
end
end
def test_member_on_resource
with_test_routes do
get '/session/1/crush'
assert_equal 'sessions#crush', @response.body
assert_equal '/session/1/crush', crush_session_path(1)
end
end
def test_redirect_modulo
with_test_routes do
get '/account/modulo/name'