Skip to content

Conversation

tony-pizza
Copy link

@tony-pizza tony-pizza commented Sep 25, 2025

Rails 7.2 restored the pre-6.1 behavior of non-local returns in transactions. In response, RuboCop Rails disabled the TransactionExitStatement cop in Rails 7.2 and above without providing the option to opt-in. This cop disallows non-local exits (return, break, throw) within ActiveRecord transactions.

Of the two behaviors (commit-on-return and roll-back-on-return), I personally don't find one to be way more obviously intuitive than the other. Perhaps I did at one point pre-6.1, but the churn since then has introduced confusion and doubt. Devs newer to Rails might not have ever had experience with the pre-6.1 behavior. I see value in being able to continue using this cop to avoid using code patterns where the behavior may not be broadly understood.

Adds a EnableForAllRailsVersions config option to the TransactionExitStatement cop that allows you to override the Rails version check and continue using this cop regardless of Rails version. The default is false so the default behavior of disabling this cop in Rails 7.2 and above remains as-is.


Before submitting the PR make sure the following are checked:

  • The PR relates to only one subject with a clear title and description in grammatically correct, complete sentences.
  • Wrote good commit messages.
  • Commit message starts with [Fix #issue-number] (if the related issue exists).
  • Feature branch is up-to-date with master (if not - rebase it).
  • Squashed related commits together.
  • Added tests.
  • Ran bundle exec rake default. It executes all tests and runs RuboCop on its own code.
  • Added an entry (file) to the changelog folder named {change_type}_{change_description}.md if the new code introduces user-observable changes. See changelog entry format for details.
  • If this is a new cop, consider making a corresponding update to the Rails Style Guide.
@tony-pizza tony-pizza marked this pull request as ready for review October 1, 2025 15:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
1 participant