Skip to content

Invalid autocorrection when using Rails/StrongParametersExpect cop with dynamic permitted attributes #1574

@ydakuka

Description

@ydakuka

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.3

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions