2017-11-27 9 views
2

이름, 보증 및 비용 속성이있는 레일즈 애플리케이션의 루비에 제품 모델이 있습니다.모델이있는 Ruby 집계 함수

모든 레코드를 나열하는 쿼리를 작성해야하지만 모든 레코드에 대해 소득 가치로 보증 지출을 계산해야합니다. 그게 괜찮은 것 같아. 그러나, 나는 모든 소득을 합리적으로 또한 합계해야합니다. 예를 들어

내 기록은 다음과 같다 :


Name Endorsement Expense 
X 100   25 
Y 20   17 
X 60   55 
T 178   78 

내가 같이 그 값을 표시해야합니다


Name Endorsement Expense Income Total Income 
X 100   25  75  75 
Y 20   17  3  78 
X 60   55  5  83 
T 178   78  100  183 

내가 어떻게 할 수 있습니까?

감사합니다.

+0

이 다른 숫자 마술에서 오는 : 그것은 다음과 같이 보일 것입니다

? – tadman

+0

총계를 변수에 저장하고 레코드를 반복하면서 각 수입을 더합니까? –

+1

'총 = 0; records.each {| r | ....; 총액 = =. 집계}' –

답변

1
rows = Product.select('name,endorsement,expense, (endorsement-expense) as income') 

total_income = 0 
rows.each do |row| 
    total_income += row.income 
    puts "#{row.name}, #{row.endorsement}, #{row.expense}, #{row.income}, #{total_income}" 
end 
+1

'# {total_income} '이 아닌'# {total_income}'이어야합니다. –

+0

감사합니다. 지금 편집 됨 – xeon131

+0

수입이 인스턴스 방법 인 경우 더 재사용 할 수 있습니다. – s1mpl3

0

은 각 제품의 총 소득 그것을 할도 수 :

products = Product.select("(endorsement - expense) AS 'income', name, endorsement, created_at, null as total") 
products.each do |p| 
    p.total = Product.select("sum(endorsement) - sum(expense) AS 'total'").where(name: p.name).where("created_at <= ?", p.created_at).group('name').last.total 
end 
0

당신은 총 소득을 축적 inject 기능을 적용 할 수 있습니다.

products.inject{|sum, product| sum += (product.endorsement - product.expense }