2011-11-06 3 views
0

나는 내 모델 중 하나에 다음과 같은 방법이 있습니다 컨트롤러에서레일 : 범위의 메소드

def remaining_stock 
    if initial_stock 
     initial_stock - bought_items 
    else 
     0 
    end 
    end 

, 나는 나머지 주식을 가지고있는 사용자가 소유 한 모든 항목을 끌어 싶습니다 제로보다 큰 .

@remaining_items = Item.where(:user_id => current_user.id).{somehow specify that remaining stock > 0} 

방법 같은, 짧은에, 뭔가

def has_remaining_stock 
    remaining_stock > 0 
end 

의 라인을 따라 뭔가 될 것하지만 쿼리 자체, 또는 어떤 종류의 하나에 해당을 추가하는 방법을 알아낼 수 없습니다 has_remaining_stock을 가져 오는 범위 (조건은 있지만 조건은 있지만 다른 방법은 사용할 수 없음)

감사합니다.

답변

0

짧은 대답은 원하는 것을 얻을 수 없다는 것입니다. 데이터베이스를 전송하여 항목을 가져 오기 위해 SQL을 생성한다는 것을 기억하십시오. SQL은 행마다 실행할 루비를 포함하지 않지만 다른 것들을 할 수 있습니다. 다음과 같음 :

.where("initial_stock = NULL or (initial_stock - bought_items) > 0") 

이 작동해야합니다. 보다 깔끔한 의미론을 위해 모델의 범위로이를 패키징 할 수 있습니다. 함수를 SQL 조건으로 표현하면됩니다.

+0

있습니까? 그것은'initial_stock IS NULL'이 아닌가요? 또한 왜 null att all에 대해 확인해야합니까? – Frost

0

나는 당신이 할 수있는 가정은 다음과 같다 : 당신은`initial_stock = NULL`가 작동하는지 확인

scope :has_remaining_stock, where("(initial_stock - bought_items) > 0)") 
관련 문제