Skip to content

Commit 6edf01c

Browse files
committed
controllers: add eager loading includes to EventsController#index
Add :host, :permissions, and :sponsorships to includes for Workshop, Meeting, and Event queries. This eliminates N+1 queries when rendering the events index page by loading all associations in a single query.
1 parent f3ca217 commit 6edf01c

1 file changed

Lines changed: 13 additions & 7 deletions

File tree

app/controllers/events_controller.rb

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,25 @@ class EventsController < ApplicationController
88
def index
99
fresh_when(latest_model_updated, etag: latest_model_updated)
1010

11-
events = [Workshop.past.includes(:chapter,
12-
:sponsors).joins(:chapter).merge(Chapter.active).limit(RECENT_EVENTS_DISPLAY_LIMIT)]
13-
events << Meeting.past.includes(:venue).limit(RECENT_EVENTS_DISPLAY_LIMIT)
14-
events << Event.past.includes(:venue, :sponsors, :sponsorships).limit(RECENT_EVENTS_DISPLAY_LIMIT)
11+
events = [Workshop.past
12+
.includes(:chapter, :sponsors, :host, :permissions)
13+
.joins(:chapter)
14+
.merge(Chapter.active)
15+
.limit(RECENT_EVENTS_DISPLAY_LIMIT)]
16+
events << Meeting.past.includes(:venue, :permissions).limit(RECENT_EVENTS_DISPLAY_LIMIT)
17+
events << Event.past.includes(:venue, :sponsors, :sponsorships, :permissions).limit(RECENT_EVENTS_DISPLAY_LIMIT)
1518
events = events.compact.flatten.sort_by(&:date_and_time).reverse.first(RECENT_EVENTS_DISPLAY_LIMIT)
1619
events_hash_grouped_by_date = events.group_by(&:date)
1720
@past_events = events_hash_grouped_by_date.map.each_with_object({}) do |(key, value), hash|
1821
hash[key] = EventPresenter.decorate_collection(value)
1922
end
2023

21-
events = [Workshop.includes(:chapter, :sponsors).upcoming.joins(:chapter).merge(Chapter.active)]
22-
events << Meeting.upcoming.all
23-
events << Event.upcoming.includes(:venue, :sponsors, :sponsorships).all
24+
events = [Workshop.upcoming
25+
.includes(:chapter, :sponsors, :host, :permissions)
26+
.joins(:chapter)
27+
.merge(Chapter.active)]
28+
events << Meeting.upcoming.includes(:venue, :permissions).all
29+
events << Event.upcoming.includes(:venue, :sponsors, :sponsorships, :permissions).all
2430
events = events.compact.flatten.sort_by(&:date_and_time).group_by(&:date)
2531
@events = events.map.each_with_object({}) do |(key, value), hash|
2632
hash[key] = EventPresenter.decorate_collection(value)

0 commit comments

Comments
 (0)