Usage

You need to tell RuboCop to load the Rails extension. There are three ways to do this:

RuboCop configuration file

Put this into your .rubocop.yml.

require: rubocop-rails

Now you can run rubocop and it will automatically load the RuboCop Rails cops together with the standard cops.

Command line

$ rubocop --require rubocop-rails

Rake task

RuboCop::RakeTask.new do |task|
  task.requires << 'rubocop-rails'
end

RuboCop Rails configuration

The following settings specific to RuboCop Rails can be configured in .rubocop.yml.

AllCops: TargetRailsVersion

What version of Rails is the inspected code using? If a value is specified for TargetRailsVersion then it is used. Acceptable values are specified as a float (e.g., 7.2); the patch version of Rails should not be included.

AllCops:
  TargetRailsVersion: 7.2

If TargetRailsVersion is not set, RuboCop will parse the Gemfile.lock or gems.locked file to find the version of Rails that has been bound to the application. If neither of those files exist, RuboCop will use Rails 5.0 as the default.

AllCops: MigratedSchemaVersion

By specifying the MigratedSchemaVersion option, migration files that have already been run can be ignored. When MigratedSchemaVersion: '20241225000000' is set, migration files lower than or equal to '20241225000000' will be ignored. For example, to ignore db/migrate/20241225000000_create_articles.rb and earlier migrations you would configure it the following way:

AllCops
  MigratedSchemaVersion: '20241225000000'

This prevents inspecting schema settings for already applied migration files. Changing already applied migrations should be avoided because it can lead to the schema getting out of sync between your local copy and what it actually is in production, depending on when bin/rails db:migrate was executed. If you want to modify your schema to comply with the cops, you should instead create new migrations.

Rails configuration tip

In Rails 6.1+, add the following config.generators.after_generate setting to your config/environments/development.rb to apply RuboCop autocorrection to code generated by bin/rails g.

# config/environments/development.rb
Rails.application.configure do
  config.generators.after_generate do |files|
    parsable_files = files.filter { |file| file.end_with?('.rb') }
    unless parsable_files.empty?
      system("bundle exec rubocop -A --fail-level=E #{parsable_files.shelljoin}", exception: true)
    end
  end
end

It uses rubocop -A to apply Style/FrozenStringLiteralComment and other unsafe autocorrection cops. rubocop -A is unsafe autocorrection, but code generated by default is simple and less likely to be incompatible with rubocop -A. If you have problems you can replace it with rubocop -a instead.

In Rails 7.2+, it is recommended to use config.generators.apply_rubocop_autocorrect_after_generate! instead of the above setting:

 # config/environments/development.rb
 Rails.application.configure do
   (snip)
   # Apply autocorrection by RuboCop to files generated by `bin/rails generate`.
-  # config.generators.apply_rubocop_autocorrect_after_generate!
+  config.generators.apply_rubocop_autocorrect_after_generate!
 end

You only need to uncomment.