두 개의 범위 (Rails 3.2.5)를 연결하는 간단한 문제라고 생각합니다.레일 3 범위, 합계 (합계)와 조건을 결합하여 오류가 발생합니다.
amount
및 transaction_date
과 같은 필드가있는 Point
이라는 모델이 있습니다. 사용자는 다양한 액티비티에 대해 많은 액수를 받고 사용하기 전까지는 "이용 가능"하며 액티비티의 일부로 발생합니다. 포인트는 transaction_date
이며 더 이상 비어 있지 않습니다.
scope :available, where("transaction_date IS NULL OR transaction_date = ''")
을 그리고 Point 객체의 적절한 수집을 반환, 좋은 작품. 그래서
> Point.available
=> [#<Point id: 123, amount: 22, transaction_date: nil >][#<Point id: 456, amount: 33, transaction_date: nil >]
을 할 수있는 그리고 내가 가능한 포인트의 합을 알고 싶다면, 나는
> Point.available.sum("amount")
=> 55
을 수행 할 수 있습니다하지만
scope :available, where("transaction_date IS NULL OR transaction_date = ''")
scope :total_available, available.sum("amount")
I와 같은 다른 영역을 만들려고하는 경우 오류가 발생합니다.
NoMethodError: undefined method `default_scoped?' for 22:Fixnum
이 sum("amount").available
를 그래서 범위 나는 오류
NoMethodError: undefined method `available' for 55:Fixnum
나는 또한 :available
에 정의 된 조건을 추가하여 :total_available
범위의 작업을 할 수 있습니다를 얻을 수 있지만, 매우 건조하지 않습니다.
무엇이 여기에 있습니까?
감사합니다. @Frederick Chung - 오류에 대한 설명 주셔서 감사합니다. 오류를 이해하는 데 도움이됩니다. 또한 귀하의 솔루션이 실용적이며 귀하의 논리가 논리적이라고 생각합니다. 그러나 범위는 AREL 및 [여기에 문서화되어 있습니다] (http://guides.rubyonrails.org/active_record_querying.html#calculations)에서 구현되고 추가 구체화로 사용되는 광산 연쇄와 유사한 종류의 사례를 보여줍니다. 어쩌면 나의 질문은 "레일스에 올바른 방법이 있습니까?" 'sum'과 같은 집계가있는 범위를 사용 하시겠습니까? –
스코프에서 계산을 실행하는 예제가 있지만 계산 범위를 정의하지는 않습니다. –
그래, 분명히 일반 스코프와 조금 다릅니다. 어쨌든 솔루션은 범위와 거의 동일하게 작동합니다. –