Commit 98a5976b authored by Nick Thomas's avatar Nick Thomas

Document ApplicationRecord / pluck_primary_key

We also enable the rubocop that makes it mandatory
parent 0d26c483
...@@ -146,6 +146,20 @@ Naming/FileName: ...@@ -146,6 +146,20 @@ Naming/FileName:
- XSS - XSS
- GRPC - GRPC
Rails/ApplicationRecord:
Enabled: true
Exclude:
# Models in database migrations should not subclass from ApplicationRecord
# as they need to be as decoupled from application code as possible
- db/**/*.rb
- lib/gitlab/background_migration/**/*.rb
- lib/gitlab/database/**/*.rb
- spec/**/*.rb
- ee/db/**/*.rb
- ee/lib/gitlab/background_migration/**/*.rb
- ee/lib/ee/gitlab/background_migration/**/*.rb
- ee/spec/**/*.rb
# GitLab ################################################################### # GitLab ###################################################################
Gitlab/ModuleWithInstanceVariables: Gitlab/ModuleWithInstanceVariables:
......
...@@ -155,6 +155,21 @@ The _only_ time you should use `pluck` is when you actually need to operate on ...@@ -155,6 +155,21 @@ The _only_ time you should use `pluck` is when you actually need to operate on
the values in Ruby itself (e.g. write them to a file). In almost all other cases the values in Ruby itself (e.g. write them to a file). In almost all other cases
you should ask yourself "Can I not just use a sub-query?". you should ask yourself "Can I not just use a sub-query?".
In line with our `CodeReuse/ActiveRecord` cop, you should only use forms like
`pluck(:id)` or `pluck(:user_id)` within model code. In the former case, you can
use the `ApplicationRecord`-provided `.pluck_primary_key` helper method instead.
In the latter, you should add a small helper method to the relevant model.
## Inherit from ApplicationRecord
Most models in the GitLab codebase should inherit from `ApplicationRecord`,
rather than from `ActiveRecord::Base`. This allows helper methods to be easily
added.
An exception to this rule exists for models created in database migrations. As
these should be isolated from application code, they should continue to subclass
from `ActiveRecord::Base`.
## Use UNIONs ## Use UNIONs
UNIONs aren't very commonly used in most Rails applications but they're very UNIONs aren't very commonly used in most Rails applications but they're very
......
...@@ -24,7 +24,7 @@ namespace :tokens do ...@@ -24,7 +24,7 @@ namespace :tokens do
end end
end end
class TmpUser < ActiveRecord::Base class TmpUser < ActiveRecord::Base # rubocop:disable Rails/ApplicationRecord
include TokenAuthenticatable include TokenAuthenticatable
self.table_name = 'users' self.table_name = 'users'
......
...@@ -22,7 +22,7 @@ module RspecProfiling ...@@ -22,7 +22,7 @@ module RspecProfiling
ENV['RSPEC_PROFILING_POSTGRES_URL'] ENV['RSPEC_PROFILING_POSTGRES_URL']
end end
class Result < ActiveRecord::Base class Result < ActiveRecord::Base # rubocop:disable Rails/ApplicationRecord
acts_as_copy_target acts_as_copy_target
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment