提交 bb051889 编写于 作者: A Andrew White

Use nested_scope? not shallow? to determine whether to copy options

The method `shallow?` returns false if the parent resource is a singleton so
we need to check if we're not inside a nested scope before copying the :path
and :as options to their shallow equivalents.

Fixes #14388.
上级 af981764
* The method `shallow?` returns false if the parent resource is a singleton so
we need to check if we're not inside a nested scope before copying the :path
and :as options to their shallow equivalents.
Fixes #14388.
*Andrew White*
* Make logging of CSRF failures optional (but on by default) with the
`log_warning_on_csrf_failure` configuration setting in
`ActionController::RequestForgeryProtection`.
......
......@@ -707,7 +707,7 @@ def scope(*args)
options[:path] = args.flatten.join('/') if args.any?
options[:constraints] ||= {}
unless shallow?
unless nested_scope?
options[:shallow_path] ||= options[:path] if options.key?(:path)
options[:shallow_prefix] ||= options[:as] if options.key?(:as)
end
......@@ -1547,6 +1547,10 @@ def resource_method_scope? #:nodoc:
RESOURCE_METHOD_SCOPES.include? @scope[:scope_level]
end
def nested_scope? #:nodoc:
@scope[:scope_level] == :nested
end
def with_exclusive_scope
begin
old_name_prefix, old_path = @scope[:as], @scope[:path]
......
......@@ -1958,6 +1958,42 @@ def test_shallow_nested_resources
assert_equal '/comments/3/preview', preview_comment_path(:id => '3')
end
def test_shallow_nested_resources_inside_resource
draw do
resource :membership, shallow: true do
resources :cards
end
end
get '/membership/cards'
assert_equal 'cards#index', @response.body
assert_equal '/membership/cards', membership_cards_path
get '/membership/cards/new'
assert_equal 'cards#new', @response.body
assert_equal '/membership/cards/new', new_membership_card_path
post '/membership/cards'
assert_equal 'cards#create', @response.body
get '/cards/1'
assert_equal 'cards#show', @response.body
assert_equal '/cards/1', card_path('1')
get '/cards/1/edit'
assert_equal 'cards#edit', @response.body
assert_equal '/cards/1/edit', edit_card_path('1')
put '/cards/1'
assert_equal 'cards#update', @response.body
patch '/cards/1'
assert_equal 'cards#update', @response.body
delete '/cards/1'
assert_equal 'cards#destroy', @response.body
end
def test_shallow_nested_resources_within_scope
draw do
scope '/hello' do
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册