2012-03-05 3 views
1

저는 모델 내에서 다양한 값을 간단한 TRUE 또는 FALSE로 가져 오는 수많은 계산을 처리하고 있습니다. 문제는,이 계산은 꽤 강렬한 것이며, 나는 오랫동안 SQL 문을 따르기가 어렵다는 것을 원하지 않는다. 차라리 모델을 레코드를 반환 할 때 확인할 수있는 메서드 내에서 전체 계산을 할 수 있습니다.레일 3, 모델 방법/계산 된 속성

나는 이것을 달성하기 위해 여러 가지 방법을 시도해 보았고, 다른 비슷한 업적을 찾았을 때 다른 사람들은 나를 좋아하는 newb를 SQL로 푸시했다. 대부분의 목적에 도움이 될지 모르겠지만 수행되는 계산이 다소 모델 외부에 있기 때문에 제공하지 못한다. .

모델 :

class Quality < ActiveRecord::Base 
... 
def passed_inspection 
    [code that calculates based on values in model] 
end 

컨트롤러 :

@records = Quality.where('passed_inspection = true') 

보기 : 그것은 당신의 문제에 대한 해결책 같은 소리

Did pass inspection?: <%= record.passed_inspection %> 
+0

을 고정? – ScottJShea

+0

도움이 필요한 문제는 무엇입니까? 긴 SQL 문을 사용하지 않으려면 모델의 메소드를 사용하십시오. 모델의 클래스에 계산 코드를 넣고 싶지 않으면 모델을 입력 받아 TRUE 또는 FALSE를 반환하는 컨트롤러 도우미 메서드를 만듭니다. –

+0

@MatteoMelani 이미보기 도우미로 표시된 계산이 있지만 통과/실패를 기준으로 레코드를 가져와야합니다. 예를 들어, 실패한 레코드 만 테이블로 출력하는 뷰가 있습니다. – Nick

답변

7

될 것이라고는 범위를 사용하는 클래스 메서드 ~ h 엘프는 모델을 정리합니다. 기본적으로이 같은 모델을 설정합니다 :

class Quality < ActiveRecord::Base 
    def self.passed_inspection 
     # Code that does your calculations 
    end 

    scope :passed, passed_inspection() # This needs to be below the function above 
end 

그런 다음이

@records = Quality.passed 

처럼 호출하여이 데이터를 얻을 수있는 어떤 자세한 정보가 필요하면이 문제에 대해 캐스트 레일있다 : RailsCast #215 Advanced Queries

편집 : 당신은 당신이하려고하는 계산의 예를 게시 할 수 끔찍한 문법

+0

나는 너를 아직 업 그레 이드 할 수 있다면, 나는 그렇게하겠다. 고마워. 이것은 기본적으로 필요한 것입니다. – Nick