2012-11-08 2 views

답변

3

범위 (즉, 일련의 기준)를 저장하고 있습니다. 그러나 해당 범위는로드 한 내용을 캐시하므로 예를 들어 $foos.each {|user| ...}은 첫 번째 사용 시점 (할당되지 않은 경우)에서 한 번만 쿼리를 실행합니다.

일부 작업은 항상 쿼리를 트리거합니다. 예를 들어 $foos.count은 항상 select count(*)...을 수행하고 나머지는 범위가로드되었는지 여부에 따라 달라집니다.

마지막으로, 그 범위에 대한 추가적인 개선은 또한 새 쿼리 그것을 사용할 때마다 발생하게 예를

$foos.order('blah').first 

를 들어, DB를 칠 것이다. irb : irb 호출을 테스트 할 때 범위가로드되는 식의 결과를 검사 할 때 조심해야하지만 이것이 일어나는지 여부를 쉽게 알 수 있어야합니다.

0

$foos은 변수 일 뿐이므로 할당 된 데이터베이스에만 적용됩니다.

관련 문제