2013-05-16 2 views
1

Eventhas_many :event_people, EventPerson에는 "역할"이라는 필드가 있습니다.Has_many를 사용하면 특정 관련 객체없이 객체 목록을 반환하는 방법은 무엇입니까?

역할이 ModeratorEventPerson없이 이벤트 목록을 반환하는 쿼리 또는 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") 

답변

2

나는 집계 및 having를 사용하여 이러한 유형의 쿼리 접근. 아무것도없는 경우 이벤트를 반환하십시오.

나는 이것을 activerecord에서 어떻게 표현할 수 있을지 모르겠다.

+0

나를 "having"이라고 표시하고 집계하면 ActiveRectord에 올바른 번역을 찾을 수있었습니다. 메모로 내 질문에 추가했습니다. – berkes

관련 문제