2012-06-22 3 views
1

두 모델 간의 관계가 있습니다 대회입니다. 필자는 매우 복잡한 동적 쿼리를 작성 중이며 조건이 맞으면 대회 기록이 부모님에게 특정 기준을 충족시키는 레코드 만 등록 할 수 있도록 제한해야합니다. 내가의 라인을 따라 뭔가 생각하고 있었는데 경쟁 테이블에서 선택하지 않고이 작업을 수행하기 위해 ...이 SQL 생산레일 3 activerecord를 사용하는 ID의 외래 키 비교

Register.where("competition_id in ?", Competition.where("...").collect {|i| i.id}) 

: 나는 PostgreSQL을가 좋아 생각하지 않는다

SELECT "registers".* FROM "registers" WHERE (competition_id in 1,2,3,4...) 

을 in 매개 변수가 괄호로 묶이지 않는다는 사실. 등록 외래 키를 경쟁 ID 목록과 어떻게 비교할 수 있습니까?

답변

3

당신이 (이것은 3.2.3에 나를 위해 일한) 조금 짧아을하고 수집을 건너 뛸 수 있습니다.

Register.where(competition_id: Competition.where("...")) 

이 다음 SQL 발생합니다 :

SELECT "registers".* FROM "registers" WHERE "registers"."competition_id" IN (SELECT "competitions"."id" FROM "competitions" WHERE "...") 
+0

나는 간결한 코드를 좋아한다, 나는 이것이 내가 갈거야 답이라고 생각합니다. – Noz

1

이 대신보십시오 :

competitions = Competition.where("...").collect {|i| i.id} 
Register.where(:competition_id => competitions)