2009-10-29 5 views
3

다음과 같은 방법으로 default_scope를 정의하려고했습니다 :default_scope with : 조인 및 : select

 SELECT catalog_products.* FROM `catalog_products` INNER JOIN `products` ON `products`.id = `catalog_products`.product_id 

named_scope로 정의하면 모든 것이 잘됩니다.

named_scope :extended, :joins => :product, :select => "catalog_products.*, products.*" 


SELECT catalog_products.*, products.* FROM `catalog_products` INNER JOIN `products` ON `products`.id = `catalog_products`.product_id 

이것은 버그가 아니거나 올바른 동작입니까?

레일즈 2.3.4를 사용하고 있습니다.

고마워!

+0

그래서 .. 질문은 무엇입니까? :) 무엇을 받고 싶습니까? 두 결과가 동일합니다. –

+0

오! 지적 해 주셔서 감사합니다! 결정된. –

답변

5

이것은 내재 된 행동입니다. 범위를 정의하는 방법에 관계없이 범위를 정의하는 클래스의 객체 만 가져올 수 있습니다. 모델 열을 선택한다는 사실에도 불구하고 Rails는 모델 열을 선택하지 않습니다. 그러나로드 연결을 열망 할 수 있습니다. 당신이하려고하는 것처럼 보입니다. 모든 제품에서 제품을 찾으십시오. 당신의 선택 문이 명명 된 범위에서 쿼리의 일부입니다 이유

default_scope :include => :product 

하지만 기본 범위는 모든 레일 기반의 쿼리의 선택 옵션을 무시한다는 것입니다 :

사실 그것은 당신이 예상 한 것보다 간단합니다 메소드 체인 위로 쿼리가 추가됩니다. find 서술문에서 반환되는 것과 어떤 차이가 나는 유일한 SELECT 옵션은 모델 열의 하위 집합을 선택하는 옵션입니다.

+0

고마워요, 결국 이것은 내 문제를 해결합니다. 나는 열망하는 로딩에 대해 알고 있었다. 내 문제는 결과 집합을 json으로 변환해야하고 Rails의 to_json 메서드는 json 출력에 쿼리에서 선택된 특성 만 추가해야한다는 것이다. 그러나 해결 방법을 발견했습니다. to_json 메서드는 매우 구성 가능하며 열심히로드 된 연결의 특성을 매우 쉽게 추가 할 수 있습니다. 다시 한 번 감사드립니다! –