A RuboCop extension focused on enforcing Rails best practices and coding conventions.
Important
This repository manages rubocop-rails gem (>= 2.0.0). rubocop-rails gem (<= 1.5.0) has been renamed to rubocop-rails_config gem.
Just install the rubocop-rails gem
$ gem install rubocop-railsor if you use bundler put this in your Gemfile
gem 'rubocop-rails', require: falseYou need to tell RuboCop to load the Rails extension. There are three ways to do this:
Put this into your .rubocop.yml.
plugins: rubocop-railsAlternatively, use the following array notation when specifying multiple extensions.
plugins:
- rubocop-other-extension
- rubocop-railsNow you can run rubocop and it will automatically load the RuboCop Rails
cops together with the standard cops.
Note
The plugin system is supported in RuboCop 1.72+. In earlier versions, use require instead of plugins.
$ rubocop --plugin rubocop-railsrequire 'rubocop/rake_task'
RuboCop::RakeTask.new do |task|
task.plugins << 'rubocop-rails'
endThe following settings specific to RuboCop Rails can be configured in .rubocop.yml.
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.2If 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.
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.
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
endIt 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!
endYou only need to uncomment.
All cops are located under
lib/rubocop/cop/rails, and contain
examples/documentation.
In your .rubocop.yml, you may treat the Rails cops just like any other
cop. For example:
Rails/FindBy:
Exclude:
- lib/example.rbYou can read a lot more about RuboCop Rails in its official docs.
Rails cops support the following versions:
- Rails 4.2+
If you use RuboCop Rails in your project, you can include one of these badges in your readme to let people know that your code is written following the community Rails Style Guide.
Here are the Markdown snippets for the two badges:
[](https://github.com/rubocop/rubocop-rails)
[](https://rails.rubystyle.guide)Checkout the contribution guidelines.
rubocop-rails is MIT licensed. See the accompanying file for
the full text.