내 Event
has_many :event_people
, EventPerson
에는 "역할"이라는 필드가 있습니다.Has_many를 사용하면 특정 관련 객체없이 객체 목록을 반환하는 방법은 무엇입니까?
역할이 Moderator
인 EventPerson
없이 이벤트 목록을 반환하는 쿼리 또는 WHERE를 찾고 싶습니다.
SELECT `events`.* FROM `events` INNER JOIN `event_people` ON `event_people`.`event_id` = `events`.`id` WHERE (event_people.event_role <> 'moderator')
이것은 carthesian 제품 (이것은 각 관계에 대해 한 번, 하나의 이벤트를 여러 번 리턴), 여전히, 심지어 이벤트를 반환를 반환 그들은 ":이 SQL 결과
Event.join(:event_people).where("event_people.role <> 'moderator' ")
사회자가 없다. " 이벤트에는 '스피커'또는 '코디네이터'와 같은 역할이있는 event_people
명이있을 수 있습니다.
이 부분에 대한 SQL은 무엇입니까? ActiveRecord로 번역하기위한 보너스 포인트.
액티브 레코드에서 having에 대한 힌트를 따르면. 이다
select ep.id
from event_people ep
group by ep.id
having sum(case when ep.role = 'Moderator' then 1 else 0 end) = 0;
는, 각 이벤트에 대한 사회자의 수를 계산 :
Event.select("events.*").joins(:event_people).group("event_people.id").having("sum(case when event_people.role = 'Moderator' then 1 else 0 end) = 0")
나를 "having"이라고 표시하고 집계하면 ActiveRectord에 올바른 번역을 찾을 수있었습니다. 메모로 내 질문에 추가했습니다. – berkes