Skip to content

Commit 1d0c298

Browse files
authored
Merge pull request codebar#2304 from davidmillen50/issue-2267-fix-workshop-sponsor-query
fix: workshop models workshop sponsors with host query
2 parents d67b0b5 + 00f3286 commit 1d0c298

File tree

3 files changed

+12
-31
lines changed

3 files changed

+12
-31
lines changed

app/models/workshop.rb

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,18 @@ class Workshop < ApplicationRecord
3131
before_validation :set_opens_at
3232

3333
def host
34-
WorkshopSponsor.hosts.for_workshop(id).first&.sponsor
34+
sql = <<~SQL
35+
SELECT sponsors.*
36+
FROM sponsors
37+
LEFT JOIN workshop_sponsors ON workshop_sponsors.sponsor_id = sponsors.id
38+
WHERE workshop_sponsors.workshop_id = ?
39+
AND workshop_sponsors.host = TRUE
40+
AND sponsors.id = workshop_sponsors.sponsor_id
41+
ORDER BY sponsors.updated_at DESC, workshop_sponsors.id ASC
42+
LIMIT 1
43+
SQL
44+
45+
Sponsor.find_by_sql([sql, id]).first
3546
end
3647

3748
def waiting_list

app/models/workshop_sponsor.rb

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,4 @@ class WorkshopSponsor < ApplicationRecord
33
belongs_to :workshop
44

55
validates :sponsor_id, uniqueness: { scope: :workshop_id, message: :already_sponsoring }
6-
7-
scope :hosts, -> { where('workshop_sponsors.host = ?', true) }
8-
scope :for_workshop, ->(workshop_id) { where('workshop_sponsors.workshop_id = ?', workshop_id) }
96
end

spec/models/workshop_sponsor_spec.rb

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,4 @@
66
.with_message('already a sponsor')
77
end
88
end
9-
10-
context '#scopes' do
11-
context '#hosts' do
12-
it 'includes workshops with hosts' do
13-
workshop_sponsor = Fabricate(:workshop_sponsor, host: true)
14-
15-
expect(WorkshopSponsor.hosts).to include(workshop_sponsor)
16-
end
17-
18-
it 'excludes workshops without hosts' do
19-
expect(WorkshopSponsor.hosts).to eq []
20-
end
21-
end
22-
23-
context '#for_workshop' do
24-
it 'includes sponsors of the workshop' do
25-
workshop_sponsor = Fabricate(:workshop_sponsor)
26-
expect(WorkshopSponsor.for_workshop(workshop_sponsor.workshop)).to include(workshop_sponsor)
27-
end
28-
29-
it 'excludes sponsors not sponsoring the workshop' do
30-
Fabricate(:workshop_sponsor)
31-
workshop = Fabricate(:workshop_no_sponsor)
32-
expect(WorkshopSponsor.for_workshop(workshop)).to eq []
33-
end
34-
end
35-
end
369
end

0 commit comments

Comments
 (0)