2010-12-30 10 views
3

アソシエーション内の「合計」列の総数はどのように合計されますか?アクティブレコードを使用して関連付けられたテーブルの合計

私のSQL-fuは吸うので、私はレール2.3.5のアプリケーションのためにActive Recordを使ってこれを行う方法を学びたいと思います。

のは、私が持っているとしましょう:


Shop 

has_many :customers 
has_many :transactions, :through => :customers 

ので、通常のもの。


shop = Shop.first 
shop.transactions 
=> 100 

[OK]を、質問のためのすべてのことの背景:

私は昨年からの取引でtotal列を合計する(2010年1月1日2010..Dec 31)と、顧客がそれらを表示。

私はトランザクションをグループ化して条件を見つける方法を知っていますが、それは私のSQLの欠如が私を下げさせる部分です。


first = Date.new(2010, 01, 01) 
last = Date.new(2010, 12, 31) 

shop.transactions(:conditions => {:created_at => first..last}, :group => :customer_id, :include => sum(:total)) 

私はちょうどスタブを取った、適切なトラックにいますか?

答えて

8

shop.transactions.sum(:total, :conditions => {:created_at => first..last}, :group => :customer_id) 

.SUM使用することができます。私は今合計がAR属性も取ることができることを知っています。クール。

0

収集方法を調べます。

あなたはのようなものを行うことができます。

transactions = Shop.transactions 
total = 0 
sum = transactions.collect{|i| total+=i.transaction.amount} 

は、取引の額が含まれているあなたの財産と量を交換してください。

また

sum = transactions.to_a.sum(&:amount) 
これは簡単な方法のように見える
+0

私はちょうど私のために働く答えを見つけました。以下に投稿します。 – pjammer

+0

また、もし私がそれをやろうとしたら、私は注射を使用したいと思います。古い私が持っているだろうが、私はそれが良い 'の'のためにデータベースを使用しようとしている。 – pjammer

関連する問題