Fix UserParameters#without being a no-op#7070
Open
dylangriffinshub wants to merge 1 commit into
Open
Conversation
#without compared symbol keys (its only caller, CreateCasaAdminService#build, always passes symbols) against ActionController::Parameters#reject!'s string keys, so the block condition was always false and nothing was ever removed. It also didn't return self, breaking the builder chain. This let :active and :type survive into CasaAdmin.new via CreateCasaAdminService#build, letting any authenticated user set active=false on a new admin, or trigger an unrescued ActiveRecord::SubclassNotFound (500) by passing type=<sibling class>. Fixes rubyforgood#7067 Also replaces the pending spec stub in spec/values/user_parameters_spec.rb with real coverage of without, without_type, without_active, with_organization, and with_password.
dylangriffinshub
requested review from
FireLemons,
compwron and
elasticspoon
as code owners
July 17, 2026 04:51
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #7067 —
UserParameters#withoutcompared symbol keys againstActionController::Parameters#reject!'s string keys, so its condition was always false and the method silently removed nothing. It also didn't returnself, breaking the builder chain.The only caller,
CreateCasaAdminService#build, calls.without(:active, :type)expecting both to be stripped beforeCasaAdmin.new. Because the call was a no-op:active=falseon a new admin via an extra field in the create request (DB default istrue).type=<sibling class>raised an unrescuedActiveRecord::SubclassNotFound(500), since Rails' STI guard is the only thing preventing type escalation.Fix
withoutnow stringifies the incoming keys before comparing (matching howreject!yields keys), and returnsselfso it can still be chained.Also replaces the pending stub in
spec/values/user_parameters_spec.rbwith real coverage forwithout,without_type,without_active,with_organization, andwith_password.Test plan
bundle exec rspec spec/values/user_parameters_spec.rbPOST /casa_adminswith an extratypeoractivefield no longer leaks through