1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

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.
This commit is contained in:
Yves Senn 2013-02-26 14:30:19 +01:00
parent 923ec86f04
commit 794cbf3e38
3 changed files with 33 additions and 1 deletions

View file

@ -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 file

@ -31,6 +31,8 @@ module ActionDispatch
# 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 file

@ -1346,7 +1346,7 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
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 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
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