Commit 1698d71c authored by Rémy Coutable's avatar Rémy Coutable

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 473b04a9
class Dashboard::ProjectsController < Dashboard::ApplicationController class Dashboard::ProjectsController < Dashboard::ApplicationController
include FilterProjects include FilterProjects
before_action :event_filter
def index def index
@projects = current_user.authorized_projects.sorted_by_activity @projects = load_projects(current_user.authorized_projects)
@projects = filter_projects(@projects)
@projects = @projects.includes(:namespace)
@projects = @projects.sort(@sort = params[:sort]) @projects = @projects.sort(@sort = params[:sort])
@projects = @projects.page(params[:page]) @projects = @projects.page(params[:page])
respond_to do |format| respond_to do |format|
format.html { @last_push = current_user.recent_push } format.html { @last_push = current_user.recent_push }
format.atom do format.atom do
event_filter
load_events load_events
render layout: false render layout: false
end end
...@@ -26,9 +21,8 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController ...@@ -26,9 +21,8 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController
end end
def starred def starred
@projects = current_user.viewable_starred_projects.sorted_by_activity @projects = load_projects(current_user.viewable_starred_projects)
@projects = filter_projects(@projects) @projects = @projects.includes(:forked_from_project, :tags)
@projects = @projects.includes(:namespace, :forked_from_project, :tags)
@projects = @projects.sort(@sort = params[:sort]) @projects = @projects.sort(@sort = params[:sort])
@projects = @projects.page(params[:page]) @projects = @projects.page(params[:page])
...@@ -37,7 +31,6 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController ...@@ -37,7 +31,6 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController
respond_to do |format| respond_to do |format|
format.html format.html
format.json do format.json do
render json: { render json: {
html: view_to_html_string("dashboard/projects/_projects", locals: { projects: @projects }) html: view_to_html_string("dashboard/projects/_projects", locals: { projects: @projects })
...@@ -48,9 +41,15 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController ...@@ -48,9 +41,15 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController
private private
def load_projects(base_scope)
projects = base_scope.sorted_by_activity.includes(:namespace)
filter_projects(projects)
end
def load_events def load_events
@events = Event.in_projects(@projects) @events = Event.in_projects(load_projects(current_user.authorized_projects))
@events = @event_filter.apply_filter(@events).with_associations @events = event_filter.apply_filter(@events).with_associations
@events = @events.limit(20).offset(params[:offset] || 0) @events = @events.limit(20).offset(params[:offset] || 0)
end end
end end
...@@ -39,7 +39,7 @@ class Event < ActiveRecord::Base ...@@ -39,7 +39,7 @@ class Event < ActiveRecord::Base
where(project_id: projects).recent where(project_id: projects).recent
end 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 :for_milestone_id, ->(milestone_id) { where(target_type: "Milestone", target_id: milestone_id) }
class << self class << self
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment