복잡한 데이터베이스 구조를 가지고 있습니다. 호출에 대한 JSON 응답을 생성하려면 여러 조인 된 테이블에서 데이터를 가져와야합니다.SQL 호출의 결과로 필요한 모든 것을 이미 가지고있을 때 데이터베이스를 다시 호출하는 것을 피하는 방법
필요한 모든 데이터를 가져 오는 SQL 쿼리를 만들었습니다 (레일 'includes
사용). 그러나 이제는 내 생각에 결과를 얻었으므로 실제로 렌더링하는 올바른 방법이 무엇인지 알 수 없습니다.
단순화 된 예를 들어, 나의 실제 코드 :이의 내가 하위 작업를 포함하고 쿼리 일부에 따라 필터링 그들 모두의 일부 중첩 된 구조를 반환을 포함 프로젝트 있다고 가정 해 봅시다 논리. 컨트롤러에서
class Project < ActiveRecord::Base
...
def with_sub_projects_visible_by(user)
includes(...complex join with sub projects and tasks...)
.where(...complex condition...)
end
end
나는 이런 식으로 뭔가를 가지고 :
def show
@project_with_full_details = Project.find(params[:id]).with_sub_projects_visible_by(current_user)
end
데이터베이스를 다시 호출하지 않고 @project_with_full_details
의 모든 데이터가 포함 된 페이지를 렌더링 간단한보기 코드를 작성하는 방법이 있나요? 내가 시도한 것에서 단순히 @project_with_full_details.sub_projects
으로 전화하는 것은 그 속임수를 쓰지 않습니다. 데이터베이스를 호출하고 쿼리 결과에 포함되어야하는 필터링 된 서브 프로젝트 대신 관련된 sub_project 전체 목록을 가져옵니다.
단지'includes (: tasks)'를 수행하는 것은 당신을 위해 열심히로드해야하고 객체와 관련 작업 연관을 얻기 위해 하나의 조인 쿼리 만 만들어야합니다. '포함 (... 하위 프로젝트와 작업과의 복잡한 결합) ...''가장 마음에 들지 않습니다. 사용자 정의 쿼리로 매우 복잡한 결합을 원한다면, join() 메소드가 필요합니다. – VelLes