2009-12-16 3 views
4

나는 당신이 나중에에 구축 할 수 있습니다 조건을 지정할 수 있도록 레일에서 명명 된 범위를 만들 수 있습니다 알고Rails에 * un *라는 스코프를 만들 수 있습니까?

named_scope :active, :conditions => {:active => true} 

... 

MyModel.active.find(...) 

이 나중에까지 평가되지 않습니다 프록시 객체를 생성하여 작동합니다. 내가 알고 싶은 건 동적 범위를 만들 수 있다면 un scope?

내 말은하는, 내가

scope = MyModel.foo(:conditions => {:target_id => 4}) 

가서 그때에 더 .find의 다른 범위의 통화를 할 수있는 프록시 객체로 주위 scope을 통과 할 수있는 방법 '푸'가있다?

답변

7

예, Anonymous Scopes 확인 : 완벽, 그리고 그것은 단지 하나 개의 파일에 문서화

def find_products 
    scope = Product.scoped({}) 
    scope = scope.conditions "products.name LIKE ?", "%#{keywords}%" unless keywords.blank? 
    scope = scope.conditions "products.price >= ?", minimum_price unless minimum_price.blank? 
    scope = scope.conditions "products.price <= ?", maximum_price unless maximum_price.blank? 
    scope = scope.conditions "products.category_id = ?", category_id unless category_id.blank? 
    scope 
end 
+1

가 [http://api.rubyonrails.org/classes/ActiveRecord/NamedScope.html] 내가 상상할 수없는 나는 다르게 보았다. – Gareth