diff options
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/CHANGELOG.md | 2 | ||||
-rw-r--r-- | actionpack/lib/action_controller/metal/strong_parameters.rb | 8 | ||||
-rw-r--r-- | actionpack/test/controller/required_params_test.rb | 2 |
3 files changed, 8 insertions, 4 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index 7df0f8c6ae..a9a00dcb6d 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -1,4 +1,4 @@ -* ActionController::Parameters#require now accepts FalseClass values +* ActionController::Parameters#require now accepts `false` values. Fixes #15685. diff --git a/actionpack/lib/action_controller/metal/strong_parameters.rb b/actionpack/lib/action_controller/metal/strong_parameters.rb index 0fc5680dcc..b70962cf44 100644 --- a/actionpack/lib/action_controller/metal/strong_parameters.rb +++ b/actionpack/lib/action_controller/metal/strong_parameters.rb @@ -184,8 +184,12 @@ module ActionController # ActionController::Parameters.new(person: {}).require(:person) # # => ActionController::ParameterMissing: param not found: person def require(key) - return false if self[key].is_a? FalseClass - self[key].presence || raise(ParameterMissing.new(key)) + value = self[key] + if value.present? || value == false + value + else + raise ParameterMissing.new(key) + end end # Alias of #require. diff --git a/actionpack/test/controller/required_params_test.rb b/actionpack/test/controller/required_params_test.rb index da80888b96..6803dbbb62 100644 --- a/actionpack/test/controller/required_params_test.rb +++ b/actionpack/test/controller/required_params_test.rb @@ -34,7 +34,7 @@ end class ParametersRequireTest < ActiveSupport::TestCase test "required parameters should accept and return false value" do - assert(!ActionController::Parameters.new(person: false).require(:person)) + assert_equal(false, ActionController::Parameters.new(person: false).require(:person)) end test "required parameters must not be nil" do |