提交 0d3a9e8a 编写于 作者: G Guillermo Iguaran

Allow setting a symbol as path in scope on routes

Was surprising found that this example doesn't work:

  scope :api do
    resources :users
  end

and the right form to use it is:

  scope 'api' do
    resources :users
  end

I think this should work similary as `namespace` where both are allowed.
These two are equivalent:

  namespace :api do
    resources :users
  end

  namespace 'api' do
    resources :user
  end
上级 0134ca6a
## Rails 4.0.0 (unreleased) ##
* Allow setting a symbol as path in scope on routes. This is now allowed:
scope :api do
resources :users
end
also is possible pass multiple symbols to scope to shorten multiple nested scopes:
scope :api do
scope :v1 do
resources :users
end
end
can be rewritten as:
scope :api, :v1 do
resources :users
end
*Guillermo Iguaran*
* Fix error when using a non-hash query argument named "params" in `url_for`.
Before:
......
......@@ -644,7 +644,7 @@ def scope(*args)
options = args.extract_options!
options = options.dup
options[:path] = args.first if args.first.is_a?(String)
options[:path] = args.flatten.join('/') if args.any?
recover = {}
options[:constraints] ||= {}
......
......@@ -370,6 +370,14 @@ def self.call(params, request)
scope :path => 'api' do
resource :me
get '/' => 'mes#index'
scope :v2 do
resource :me, as: 'v2_me'
get '/' => 'mes#index'
end
scope :v3, :admin do
resource :me, as: 'v3_me'
end
end
get "(/:username)/followers" => "followers#index"
......@@ -1467,6 +1475,18 @@ def test_path_scope
assert_equal 'mes#index', @response.body
end
def test_symbol_scope
get '/api/v2/me'
assert_equal 'mes#show', @response.body
assert_equal '/api/v2/me', v2_me_path
get '/api/v2'
assert_equal 'mes#index', @response.body
get '/api/v3/admin/me'
assert_equal 'mes#show', @response.body
end
def test_url_generator_for_generic_route
get 'whatever/foo/bar'
assert_equal 'foo#bar', @response.body
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册