2011-09-12 2 views
1

내가 가진 범위레일 2의 경우 범위

scope :for_list, lambda { |brand_ids| 
    where('brands.id IN (?)', brand_ids).includes(:models).where("models.popular = '1'").order('models.name') 
} 

그러나 몇 번가에 상관 models.popular =

그리고이 경우에 내가 모델에서 모든 popular 매개 변수

을 무시하고 선택합니다 (1)

해당 범위를 쓰는 방법은 무엇입니까?

답변

1

람다 함수이기 때문에 if/else을 사용할 수 있으며 호출시 평가됩니다. 따라서 다음과 같은 범위를 쓸 수 있습니다.

scope :for_list, lambda { |brand_ids| 
    if self.popular > 1 
      where('brands.id IN (?)', brand_ids).includes(:models).where("models.popular = '1'").order('models.name') 
    else 
      where('brands.id IN (?)', brand_ids).includes(:models).order('models.name') 
    end 
} 

이렇게하면됩니다. 그러나, 나는 이것을 사용하는 것에 대해주의를 기울였다. 그 논리는 범위에 속하지 않습니다. 대신, 당신은 당신의 전망과 컨트롤러가 설정되어 있는지 다시 질문해야합니다.