Hier is de oplossing die ik heb gekozen. De truc was het gebruik van left outer join
(ruby-commando gretig_load) voor gebruikers en de tabel met geblokkeerde_datum_perioden, en inclusief die gebruikers wiens startdatumveld in de samengevoegde tabel NULL is, uiteraard omdat ze geen geblokkeerde datumobjecten hebben die aan zichzelf zijn gekoppeld. De vraag die ik gebruik:
User.eager_load(:blocked_date_periods).
where("blocked_date_periods.start_date is null OR
not tsrange(
blocked_date_periods.start_date - '00:59:59'::interval,
blocked_date_periods.end_date + '00:59:59'::interval
) @> ?::timestamp",
Date.parse(DATE_STRING)).count
Ik moest 1 uur optellen en aftrekken van de start- en einddatum omdat de zoekopdracht om de een of andere reden geen exacte einddatums wilde bevatten, zodat 26-12-2015 niet binnen de periode van 22-12-2015 tot 12-16-2015 om de een of andere reden die ik nog moet begrijpen.
Om de een of andere reden vind ik die oplossing niet leuk en zou ik graag willen weten of er een vraag is die beter en sneller is dan wat ik heb.