Remove and preload calls inside API code in favor of using scopes
As mentioned in https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/25711#note_147728915, we have a pattern of using preload
in the API code, but we should move these into model scopes:
$ git grep preload
deploy_keys.rb: keys = user_project.deploy_keys_projects.preload(:deploy_key)
entities.rb: # it override the preloaded associations and makes a query
entities.rb: def self.preload_relation(projects_relation, options = {})
entities.rb: projects_relation.preload(:project_feature, :route)
entities.rb: .preload(:import_state, :tags)
entities.rb: .preload(namespace: [:route, :owner])
entities.rb: def self.preload_relation(projects_relation, options = {})
entities.rb: super(projects_relation).preload(:group)
entities.rb: .preload(project_group_links: { group: :route },
entities.rb: # Avoids an N+1 query since labels are preloaded
entities.rb: # Avoids an N+1 query since timelogs are preloaded
entities.rb: # Avoids an N+1 query since labels are preloaded
entities.rb: def self.preload_relation(projects_relation, options = {})
entities.rb: .preload(:source, user: [notification_settings: :source])
entities.rb: .preload(:source, user: [notification_settings: :source])
jobs.rb: builds = builds.preload(:user, :job_artifacts_archive, :job_artifacts, :runner, pipeline: :project)
jobs.rb: builds = builds.preload(:job_artifacts_archive, :job_artifacts, project: [:namespace])
merge_requests.rb: .preload(:source_project, :target_project)
pipeline_schedules.rb: .preload([:owner, :last_pipeline])
pipeline_schedules.rb: .preload(:owner, :last_pipeline)
projects_relation_builder.rb: projects_relation = preload_relation(projects_relation, options)
projects_relation_builder.rb: def preload_relation(projects_relation, options = {})
protected_branches.rb: protected_branches = user_project.protected_branches.preload(:push_access_levels, :merge_access_levels)
protected_tags.rb: protected_tags = user_project.protected_tags.preload(:create_access_levels)
users.rb: users = users.preload(:identities, :u2f_registrations) if entity == Entities::UserWithAdmin