1
내가이 간단한 응용 프로그램의 작동이 있다고 가정 내 첫 번째보기 내예압 협회
# model
class Project
has_many :numbers
def my_numbers
numbers
end
end
# controller
class ProjectController
def index
@projects = Project.includes(:numbers)
end
end
, 아무 문제입니다. 연결을 직접 호출하기 때문에 모든 숫자가 이미로드되었습니다.
@projects.each do |project|
project.numbers
# no probleme here. Hit the cache of included numbers.
end
그리고 여기에 로그
Project Load (0.8ms) SELECT "projects".* FROM "projects"
ProjectNumber Load (0.5ms) SELECT "project_numbers".* FROM "project_numbers" WHERE "project_numbers"."project_id" IN (1,2)
그러나 아래 볼 수 있듯이이 두 번째 예제, 프로젝트에서 메서드 호출 내에서 번호를 호출 my_numbers 호출 할 때마다, 새로운 DB 호출을 트리거입니다 :
@projects.each do |project|
project.my_numbers
end
그리고 여기에 로그
Project Load (0.8ms) SELECT "projects".* FROM "projects"
ProjectNumber Load (0.5ms) SELECT "project_numbers".* FROM "project_numbers" WHERE "project_numbers"."project_id" IN (1,2)
ProjectNumber Load (0.5ms) SELECT "project_numbers".* FROM "project_numbers" WHERE "project_numbers"."project_id" = 1
ProjectNumber Load (0.5ms) SELECT "project_numbers".* FROM "project_numbers" WHERE "project_numbers"."project_id" = 2
입니다
어쨌든이를 방지 할 수 있습니까? 내 모델이 첫 번째 db 요청의 포함 된 숫자를 재사용하지 않는 이유는 무엇입니까?
미리 감사드립니다.
* 머리를 부딪 치다 * 범위 문제 ... – christianblais