2013-07-18 2 views
0

나는이 세 모델n + 한 가지 문제를 피하려면 어떻게 코딩 할 수 있습니까?

  • 학생
  • 성별
  • 블러드

학생은 성별, 블러드, 현 이러한 세 가지 모델을 가지고 있습니다. 이고 각각은 학생에게 속합니다.

각 모델 파일에 이미 연관이 설정되어 있습니다.

이 경우 N + 1 문제를 피하려면 어떻게해야합니까?

이와 비슷한가요?

@students = Student.find(:all).includes.includes(:gender, :blood_type, :prefecture) 

답변

3

는 한 번만 .includes해야하고, 레일 (3)을 필요로하지 않기 때문에 당신은 find(:all) 제거 할 수 있습니다.

students = Student.includes(:gender, :blood_type, :prefecture) 

다음 그냥 테이블을 조회하고 난 당신이 성능 문제에 대해 우려하는 경우 잠재적 인 대체 내 보석 ClassyEnum을 확인하는 것이 좋습니다 것처럼 보이는 그런 말로 미루어 보아.

+0

보석이 성능에 어떤 도움이되는지 설명해주십시오. – Mohamad

+0

@ 모하마드 (Mohamad) 데이터베이스를 비정규 화 (denormalize)하여 쿼리가 줄어들게합니다. [wikipedia article] (http://en.wikipedia.org/wiki/Denormalization)은 내가 할 수있는 것보다 더 잘 설명합니다. 기본 개념은 값을 문자열로 저장하여 추가 조인을 제거한 다음 즉시 객체로 변환한다는 것입니다. –

관련 문제