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:
parent
923ec86f04
commit
794cbf3e38
3 changed files with 33 additions and 1 deletions
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue