buscar todos los registros primarios donde todos los registros secundarios tienen un valor dado (pero no solo algunos registros secundarios)

Un evento tiene muchos participantes. Un participante tiene un campo de "estado".

class Event < ActiveRecord::Base
  has_many :participants
end

class Participant < ActiveRecord::Base
  belongs_to :event
end

Necesito encontrar todos los eventos, excepto los siguientes: eventos en los que cada uno de sus participantes tiene un estado de "presente".

Puedo encontrar todos los eventos en los que algunos de sus participantes tienen un estado de "presente" con el siguiente código AR:

Event.joins(:participants).where
 .not(participants: {status: 'present'})
  .select("events.id, count(*)")
   .group("participants.event_id")
    .having("count(*) > 0")

Eso crea SQL como:

SELECT events.id, participants.status as status, count(*) 
FROM `events` INNER JOIN `participants` 
ON `participants`.`event_id` = `events`.`id` 
WHERE (`participants`.`status` != 'present') 
GROUP BY participants.event_id HAVING count(*) > 0

Estacasi trabajos. El problema es que si una de las filas del participante (dentro del alcance de@participant.event_id) tiene un estado de algo diferente como "ausente", el evento aún se obtendrá, porque al menos algunos de los registros hermanos tienen un estado igual a algo diferente a "presente".

Necesito asegurarme de que estoy filtrando todos los registros de eventos contodas participantes de un estado de "presente".

Estoy abierto a las soluciones ActiveRecord o SQL.

Respuestas a la pregunta(5)

Su respuesta a la pregunta