2010-08-06 3 views
1

에서 현재 객체를 참조하십시오. 내가 할 수없는 것은 다음과 같습니다.레일 - 내가 더 효율적 발견을 구축이라는 범위의 무리가 내 응용 프로그램에서 바로 질문 ...</p> <p>를 넣어 경우도 확실하지 않다, 나는 인정해야 모델

=> 현재 카테고리와 그 하위 카테고리의 모든 제품을 찾고 싶습니다. 나는 나무를 구축하기 위해 '조상'보석을 사용하고,이 클래스 수준에서 범위 이름을 제공합니다 :

named_scope :in_tree, :include => :category, :conditions => ['category in (?)', (subtree_of(@category)) ] 
:
subtree_of(node)  #Subtree of node, node can be either a record or an id 

그래서 내가이 같은 named_scope을 가지고 좋은 생각이 될 것이라고 생각

또는

named_scope :in_tree, :include => :category, :conditions => ['category in (?)', (@category.subtree_ids) ] 

두 가지 컨트롤러와 헬퍼에서 작동,하지만 모델에 ... 그리고 내가 잘못 아니에요 때 (내가 컨트롤러에서 정의한) 인 "@category"에 온다 에서 사용할 수 없습니다. 모델.

가용 한 방법이 있습니까?

도움 주셔서 감사합니다.

답변

1

@category이 컨트롤러 내에서 살고있는 인스턴스 변수이기 때문에이 모델에서 작동하지 않습니다. 당신은 람다 (익명 함수)를 사용하여 명명 된 범위에 범주를 통과 할 수있다 : 당신의 컨트롤러/헬퍼의

named_scope :in_tree, lambda { |category| { :include => :category, 
    :conditions => ['category in (?)', (subtree_of(category)) ] }} 

또는 지금

named_scope :in_tree, lambda { |category| { :include => :category, 
    :conditions => ['category in (?)', (category.subtree_ids) ] }} 

당신이 Product.in_tree(@category)를 사용하여 명명 된 범위를 사용할 수 있습니다.

+0

고맙습니다. 존! 두 번째 옵션은 매력처럼 작동합니다! 사실 내 질문에 실수를 저질렀습니다. named_scope : in_tree, lambda {| category | {: include => : category, : conditions => [ 'categories? id in (?)', (category.subtree_ids)]}} –

+0

멋지다. –