2013-03-03 2 views
2

Program 클래스 has_many PatientsPatient 클래스는 salary액티브 쿼리 인터페이스 목록을 반환

내가 respond_to :json , respond_with(@org)와 제이빌더에 전달하는 JSON 같은 필드는이 비슷했습니다 지금

@org = Org.includes(programs: [{hospitals: :nurses}, :patients]).find(params[:id]) 

음 데이터베이스에 org_id = params[:id] 상태를 나타내는 200 개의 프로그램이 있으면 모두 반환합니다. 그러나 이것은 내가 원하는 것이 아닙니다. 나는 "5"프로그램과의 "급여"필드들 "오"프로그램 반환을 말하고 싶어 :. '환자'표는 가장 높은를 내가 활성 기록 쿼리에서이 제한을 구현할 수있는 방법

?

답변

1

뭔가

Program.includes([{hospitals: :nurses}, :patients]).where("organization_id = ?", params[:id]).order("patients.salary desc").limit(5) 

또는 당신이 할 수있는

같은 :

@program_ids = Program.select("id").includes([{hospitals: :nurses}, :patients]).where("organization_id = ?", params[:id]).order("patients.salary desc").limit(5) 
@org = Org.includes(programs: [{hospitals: :nurses}, :patients]).where("programs.id = ?", program_ids.collect(&:id)).find(params[:id]) 

당신은 또한 수 이 질문에 확인하여, 한 단계 (여전히 2 개 쿼리)에서 하위 쿼리와 리팩토링 : 당신은 단지 하나의 쿼리에서 해당 정보를 얻을 수 있는지 잘 모르겠어요

subqueries in activerecord

+0

우리는 꺼낼 수 Org.includes that .find (params [: id])가이를 처리하고 있기 때문에 코드의 "where"부분을 처리합니다. – Bohn

+0

그리고 다음 조건이 "bottom 5 nurses"목록에도 포함되어 있다면? 단순함을 위해 급여라고하는 분야도 있다고 가정 해 봅시다. 상위 5 명과 하위 5 명의 간호사. 도움 주셔서 감사합니다. – Bohn

+1

그래, 상위 5 개 프로그램 만 반환하는 쿼리를 추가했습니다. 조직을 계속 원할 경우 조직을 맨 위에 놓고 where 절을 제거 할 수 있습니다. – rorra