-
-
Notifications
You must be signed in to change notification settings - Fork 292
Open
Description
Description
When using Rails/StrongParametersExpect with dynamic permitted attributes (e.g. returned from a policy), the autocorrection generates invalid code.
Original code:
params.require(:moderation_comment)
.permit(policy(ModerationComment).permitted_attributes_for_create)After autocorrect:
params.expect(moderation_comment: [policy(ModerationComment).permitted_attributes_for_create])However, this code is incorrect and raises an exception at runtime. The correct transformation should splat the array:
params.expect(moderation_comment: [*policy(ModerationComment).permitted_attributes_for_create])Actual behavior
[1] pry> params.require(:moderation_comment).permit(policy(ModerationComment).permitted_attributes_for_create)
=> #<ActionController::Parameters {"body"=>"Laboriosam sit aliquam laudantium.", ...} permitted: true>
[2] pry> params.expect(moderation_comment: [policy(ModerationComment).permitted_attributes_for_create])
ActionController::ParameterMissing: param is missing or the value is empty or invalid: moderation_comment (ActionController::ParameterMissing)
from /usr/local/bundle/ruby/3.2.0/gems/actionpack-8.0.4/lib/action_controller/metal/strong_parameters.rb:525:in `require'
[3] pry> params.expect(moderation_comment: [*policy(ModerationComment).permitted_attributes_for_create])
=> #<ActionController::Parameters {"body"=>"Laboriosam sit aliquam laudantium.", ...} permitted: true>Rubocop
$ rubocop -V
1.82.0 (using Parser 3.3.9.0, rubocop-ast 1.48.0, analyzing as Ruby 3.2, running on ruby 3.2.9) [x86_64-linux]
- rubocop-capybara 2.22.1
- rubocop-factory_bot 2.28.0
- rubocop-migration 0.7.1
- rubocop-performance 1.26.1
- rubocop-rails 2.34.2
- rubocop-rake 0.7.1
- rubocop-rspec 3.8.0
- rubocop-rspec_rails 2.32.0
- rubocop-thread_safety 0.7.3Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels