Skip to content
Snippets Groups Projects
Verified Commit 98a5976b authored by Nick Thomas's avatar Nick Thomas
Browse files

Document ApplicationRecord / pluck_primary_key

We also enable the rubocop that makes it mandatory
parent 0d26c483
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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:
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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'
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment