summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2015-10-13 11:49:01 +0200
committerYorick Peterse <yorickpeterse@gmail.com>2015-10-15 12:05:01 +0200
commit1554786c6ac49b452697d2f7a3e8daf6e3ac36d3 (patch)
tree47393db31476e5c7022350463e74a2cb6deb8ed3
parentff8f7fb0a111a5db2a50aa40e967cae699b0b245 (diff)
downloadgitlab-ce-1554786c6ac49b452697d2f7a3e8daf6e3ac36d3.tar.gz
Eager load various issue/note associations
This ensures we don't end up running N+1 queries for the objects in the affected collections.
-rw-r--r--app/controllers/projects/issues_controller.rb2
-rw-r--r--app/models/concerns/issuable.rb7
-rw-r--r--app/models/group.rb2
-rw-r--r--app/models/note.rb1
4 files changed, 9 insertions, 3 deletions
diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb
index 4612abcbae8..27aa70a992b 100644
--- a/app/controllers/projects/issues_controller.rb
+++ b/app/controllers/projects/issues_controller.rb
@@ -57,7 +57,7 @@ class Projects::IssuesController < Projects::ApplicationController
def show
@participants = @issue.participants(current_user)
@note = @project.notes.new(noteable: @issue)
- @notes = @issue.notes.inc_author.fresh
+ @notes = @issue.notes.inc_associations.fresh
@noteable = @issue
respond_with(@issue)
diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb
index 4db4ffb2e79..0e8bcc1a4ec 100644
--- a/app/models/concerns/issuable.rb
+++ b/app/models/concerns/issuable.rb
@@ -47,7 +47,8 @@ module Issuable
prefix: true
attr_mentionable :title, :description
- participant :author, :assignee, :notes, :mentioned_users
+
+ participant :author, :assignee, :notes_with_associations, :mentioned_users
end
module ClassMethods
@@ -176,6 +177,10 @@ module Issuable
self.class.to_s.underscore
end
+ def notes_with_associations
+ notes.includes(:author, :project)
+ end
+
private
def filter_superceded_votes(votes, notes)
diff --git a/app/models/group.rb b/app/models/group.rb
index 9cd146bb73b..465c22d23ac 100644
--- a/app/models/group.rb
+++ b/app/models/group.rb
@@ -64,7 +64,7 @@ class Group < Namespace
end
def owners
- @owners ||= group_members.owners.map(&:user)
+ @owners ||= group_members.owners.includes(:user).map(&:user)
end
def add_users(user_ids, access_level, current_user = nil)
diff --git a/app/models/note.rb b/app/models/note.rb
index ee0c14598f3..3ad9895a935 100644
--- a/app/models/note.rb
+++ b/app/models/note.rb
@@ -59,6 +59,7 @@ class Note < ActiveRecord::Base
scope :fresh, ->{ order(created_at: :asc, id: :asc) }
scope :inc_author_project, ->{ includes(:project, :author) }
scope :inc_author, ->{ includes(:author) }
+ scope :inc_associations, ->{ includes(:author, :noteable, :updated_by) }
serialize :st_diff
before_create :set_diff, if: ->(n) { n.line_code.present? }