2011-07-06 4 views
0

내 애플 리케이션은 인보이스와 invoice_items 있습니다. 각 인보이스에는 많은 invoice_item이 있습니다. 내 invoice_items 모델에서칼럼 계산 레일 3

, 나는 총을 해결하기 위해 계산을 가지고 잘 작동

def total 
    @total ||= quantity.to_d * price 
end 

합니다. 제가하려고하는 것은 합계를 계산하는 것입니다. 그리고 저는 붙어 있습니다. 콘솔에서

, 나는이 시도했다 :

invoice = Invoice.first 
invoice.invoice_items.sum(:total) 

하지만라는 오류 얻을 : 총이 존재하지 않습니다. 나는 그렇지 않다고 추측한다.

제 질문은이 계산을 수행하는 방법입니다.

- UPDATE -

은 내가 @ paukul의 대답에 따라 다음 시도했다 :

invoice.invoice_items.sum(&:total) 

이 오류를 제공합니다

ArgumentError: wrong number of arguments (1 for 2) 

감사

답변

3

을 .sum을 전체 invoice_items 배열 (.total 메소드를 분명히 알지 못함)에서 호출하고 있으며 각각의 individua l 청구서 항목. 어레이의 모든 단일 항목을 블록에 산출하고 결과를 합산하는 sum의 블록 버전을 사용하려는 경우 작동하도록하십시오.

구문 기호에 proc 구문을 사용하여 기호가 거의 존재합니다. invoice.invoice_items.inject(0) { |sum, item| sum + item.total }

에 해당 invoice.invoice_items.all.sum(&:total)가 도움을 RDoc for Enumerable#sum

+0

감사를 참조하십시오. 최상위 방법을 시도 할 때 오류가 발생합니다. 내 첫 번째 질문을 업데이트했습니다. Jx –

+0

가 내 대답을 업데이트했는데 .all이 누락되었습니다. – paukul

+0

환상적 !! 감사 :) –