Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge pull request #9439 from senny/9435_router_params_as_integers

convert non-string default params to strings in the router.
  • Loading branch information...
commit 6a235faa2a0496b88616aaf30ee1d0a60adaa0bb 2 parents 923ec86 + 794cbf3
@pixeltrix pixeltrix authored
View
10 actionpack/CHANGELOG.md
@@ -1,5 +1,15 @@
## 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.
View
2  actionpack/lib/action_dispatch/routing/route_set.rb
@@ -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
View
22 actionpack/test/dispatch/routing_test.rb
@@ -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
Please sign in to comment.
Something went wrong with that request. Please try again.