2014-05-15 2 views
2

비슷한 질문은 레일스 3에 관한 것이며, 스코프는 레일스 4에서 적당량을 변경했습니다. 구문 적으로 만, 그러나 나는 여전히 최신의 것을 가지고 싶습니다 대답.모델에서 레일즈 4의 두 스코프를 결합하십시오

@recent_cats = Cat.recent 

나는 모든 승인 고양이 얻고 싶다면 :

을 나는 모든 최근의 고양이를 얻고 싶다면

class Cat < ActiveRecord::Base 
    scope :recent, -> { order('cats.approve_date ASC').limit(5) } 
    scope :approved, -> { where(state: 'approved') } 
end 

: 어쨌든

는 어떻게 이러한 범위를 병합 할

@approved_cats = Cat.approved 

하지만 최근 승인 된 모든 고양이는 어떻게 받습니까? 나는 컨트롤러에 merge 기능을 사용할 수 있지만 나는 규칙을 따라야하고 싶은 모델에서이 작업을 수행 :

class Cat < AciveRecord::Base 
    scope :recent_approved, -> { } 
end 
+3

도 가능합니다. – Iceman

+0

@Iceman 내가 모델에서 이것을하고 싶다고 말했지만, 그것은 그것을 읽을 수있는 아주 좋은 방법입니다. 감사합니다! – Starkers

+1

결국'self.recent.approved'를': recent_approved' 범위에 넣을 수 있습니다. – MrYoshiji

답변

2

할 수 있습니다이 같은 체인 범위가.

@cats = Cat.approved.recent 

그러나 범위를 사용하는 Cat.approved.recent이 작동

scope :recent_approved, -> { where(state: 'approved').order(:approve_date).limit(5) } 
관련 문제