提交 794cbf3e 编写于 作者: Y Yves Senn

allow non-String default params in the router.

Closes #9435.

Skip valid encoding checks for non-String parameters that come
from the matched route's defaults.
上级 923ec86f
## Rails 4.0.0 (unreleased) ##
* Skip valid encoding checks for non-String parameters that come
from the matched route's defaults.
Fixes #9435.
Example:
root to: 'main#posts', page: 1
*Yves Senn*
* Don't verify Regexp requirements for non-Regexp `:constraints`.
Fixes #9432.
......
......@@ -31,6 +31,8 @@ def call(env)
# If any of the path parameters has a invalid encoding then
# raise since it's likely to trigger errors further on.
params.each do |key, value|
next unless value.respond_to?(:valid_encoding?)
unless value.valid_encoding?
raise ActionController::BadRequest, "Invalid parameter: #{key} => #{value}"
end
......
......@@ -1346,7 +1346,7 @@ def test_nested_optional_path_shorthand
assert_equal 'en', @request.params[:locale]
end
def test_default_params
def test_default_string_params
draw do
get 'inline_pages/(:id)', :to => 'pages#show', :id => 'home'
get 'default_pages/(:id)', :to => 'pages#show', :defaults => { :id => 'home' }
......@@ -1366,6 +1366,26 @@ def test_default_params
assert_equal 'home', @request.params[:id]
end
def test_default_integer_params
draw do
get 'inline_pages/(:page)', to: 'pages#show', page: 1
get 'default_pages/(:page)', to: 'pages#show', defaults: { page: 1 }
defaults page: 1 do
get 'scoped_pages/(:page)', to: 'pages#show'
end
end
get '/inline_pages'
assert_equal 1, @request.params[:page]
get '/default_pages'
assert_equal 1, @request.params[:page]
get '/scoped_pages'
assert_equal 1, @request.params[:page]
end
def test_resource_constraints
draw do
resources :products, :constraints => { :id => /\d{4}/ } do
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册