Document ApplicationRecord / pluck_primary_key

We also enable the rubocop that makes it mandatory
This commit is contained in:
Nick Thomas 2019-03-29 11:23:05 +00:00
parent 0d26c48332
commit 98a5976b78
No known key found for this signature in database
GPG Key ID: 2A313A47AFADACE9
4 changed files with 31 additions and 2 deletions

View File

@ -146,6 +146,20 @@ Naming/FileName:
- XSS
- 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/ModuleWithInstanceVariables:

View File

@ -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
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
UNIONs aren't very commonly used in most Rails applications but they're very

View File

@ -24,7 +24,7 @@ namespace :tokens do
end
end
class TmpUser < ActiveRecord::Base
class TmpUser < ActiveRecord::Base # rubocop:disable Rails/ApplicationRecord
include TokenAuthenticatable
self.table_name = 'users'

View File

@ -22,7 +22,7 @@ module RspecProfiling
ENV['RSPEC_PROFILING_POSTGRES_URL']
end
class Result < ActiveRecord::Base
class Result < ActiveRecord::Base # rubocop:disable Rails/ApplicationRecord
acts_as_copy_target
end
end