提交 d03aa104 编写于 作者: C Carlos Antonio da Silva

Force given path to http methods in mapper to skip canonical action checking

This fixes the following scenario:

    resources :contacts do
      post 'new', action: 'new', on: :collection, as: :new
    end

Where the /new path is not generated because it's considered a canonical
action, part of the normal resource actions:

    new_contacts POST   /contacts(.:format)          contacts#new

Fixes #2999
上级 319db7b1
......@@ -535,7 +535,8 @@ def delete(*args, &block)
private
def map_method(method, args, &block)
options = args.extract_options!
options[:via] = method
options[:via] = method
options[:path] ||= args.first if args.first.is_a?(String)
match(*args, options, &block)
self
end
......@@ -1509,7 +1510,7 @@ def path_for_action(action, path) #:nodoc:
prefix = shallow_scoping? ?
"#{@scope[:shallow_path]}/#{parent_resource.path}/:id" : @scope[:path]
path = if canonical_action?(action, path.blank?)
if canonical_action?(action, path.blank?)
prefix.to_s
else
"#{prefix}/#{action_path(action, path)}"
......
......@@ -1405,7 +1405,7 @@ def test_route_constraints_with_supported_options_must_not_error
end
end
end
def test_route_with_subdomain_and_constraints_must_receive_params
name_param = nil
set.draw do
......@@ -1418,7 +1418,7 @@ def test_route_with_subdomain_and_constraints_must_receive_params
set.recognize_path('http://subdomain.example.org/page/mypage'))
assert_equal(name_param, 'mypage')
end
def test_route_requirement_recognize_with_ignore_case
set.draw do
get 'page/:name' => 'pages#show',
......
......@@ -171,6 +171,8 @@ def self.call(params, request)
post :preview, :on => :collection
end
end
post 'new', :action => 'new', :on => :collection, :as => :new
end
resources :replies do
......@@ -876,6 +878,12 @@ def test_projects
assert_equal '/projects/1/edit', edit_project_path(:id => '1')
end
def test_projects_with_post_action_and_new_path_on_collection
post '/projects/new'
assert_equal "project#new", @response.body
assert_equal "/projects/new", new_projects_path
end
def test_projects_involvements
get '/projects/1/involvements'
assert_equal 'involvements#index', @response.body
......@@ -2450,7 +2458,6 @@ def app; Routes end
get "/foo/bar/baz"
assert_equal "/pooh", @response.body
end
end
class TestTildeAndMinusPaths < ActionDispatch::IntegrationTest
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册