Skip to content
Snippets Groups Projects
Commit 667c71ab authored by Rémy Coutable's avatar Rémy Coutable
Browse files

Use preload for Event#target since it's a polymorphic association


Also, don't use limit in subquery, MySQL don't like that.

Signed-off-by: default avatarRémy Coutable <remy@rymai.me>
parent 84cdce2d
No related branches found
No related tags found
1 merge request!1226[EE] Resolve "GroupsController#activity.json is REALLY slow due to SQL"
Pipeline #
class Dashboard::ProjectsController < Dashboard::ApplicationController
include FilterProjects
 
before_action :event_filter
def index
@projects = current_user.authorized_projects.sorted_by_activity
@projects = filter_projects(@projects)
@projects = @projects.includes(:namespace)
@projects = load_projects(current_user.authorized_projects)
@projects = @projects.sort(@sort = params[:sort])
@projects = @projects.page(params[:page])
 
respond_to do |format|
format.html { @last_push = current_user.recent_push }
format.atom do
event_filter
load_events
render layout: false
end
Loading
Loading
@@ -26,9 +21,8 @@ def index
end
 
def starred
@projects = current_user.viewable_starred_projects.sorted_by_activity
@projects = filter_projects(@projects)
@projects = @projects.includes(:namespace, :forked_from_project, :tags)
@projects = load_projects(current_user.viewable_starred_projects)
@projects = @projects.includes(:forked_from_project, :tags)
@projects = @projects.sort(@sort = params[:sort])
@projects = @projects.page(params[:page])
 
Loading
Loading
@@ -37,7 +31,6 @@ def starred
 
respond_to do |format|
format.html
format.json do
render json: {
html: view_to_html_string("dashboard/projects/_projects", locals: { projects: @projects })
Loading
Loading
@@ -48,9 +41,15 @@ def starred
 
private
 
def load_projects(base_scope)
projects = base_scope.sorted_by_activity.includes(:namespace)
filter_projects(projects)
end
def load_events
@events = Event.in_projects(@projects)
@events = @event_filter.apply_filter(@events).with_associations
@events = Event.in_projects(load_projects(current_user.authorized_projects))
@events = event_filter.apply_filter(@events).with_associations
@events = @events.limit(20).offset(params[:offset] || 0)
end
end
Loading
Loading
@@ -39,7 +39,7 @@ class Event < ActiveRecord::Base
where(project_id: projects).recent
end
 
scope :with_associations, -> { includes(:author, :project, :target, project: :namespace) }
scope :with_associations, -> { includes(:author, :project, project: :namespace).preload(:target) }
scope :for_milestone_id, ->(milestone_id) { where(target_type: "Milestone", target_id: milestone_id) }
scope :issues, -> { where(target_type: 'Issue') }
scope :merge_requests, -> { where(target_type: 'MergeRequest') }
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