File tree Expand file tree Collapse file tree 3 files changed +12
-31
lines changed Expand file tree Collapse file tree 3 files changed +12
-31
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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 ) }
96end
Original file line number Diff line number Diff line change 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
369end
You can’t perform that action at this time.
0 commit comments