2012-02-13 8 views
2

totalprocessing_feesの2つのデータベース属性を持つActiveRecordモデルがあります。複数列の計算にActiveRecordスコープを使用していますか?

それは、このような(単なる例として)として定義されたさまざまなスコープを持っている:

class Item < ActiveRecord::Base 
    scope :completed, joins(:order).where(:orders => {:status => Order::Status::COMPLETED}) 
    scope :for_client, lambda {|client| where("client_id=?", client.id)} 
...etc... 
end 

私は簡単のような何かを行うことができます。

Item.completed.for_client(client).sum(:total) 

をしかし私がやりたいことのようなものです:

Item.completed.for_client(client).calculate(:total - :processing_fees) # obv not valid 

このような方法はありますか?

答えて

6

このような何かが動作するはずです:

Item.completed.for_client(client).calculate(:sum, "item.total - item.processing_fees") 
+0

まあ、*その*は簡単でした。あなたがそこに表情を入れることができたことは私には起こりませんでした。 'calculate(operation、column_name、options = {}) これは指定された列の集計値を計算します。' – denishaskin

+0

@dwhsix:ドキュメンテーションは時には少し薄いことがありますそのようなものについて。 Railsは、このような場所でSQLの一部を削除することがよくあります。そして、一般的には、ハッシュや配列のような異なる種類のパラメータを取ることがよくあります。基本的なドキュメントでは、フィールド名の単一のシンボルについてしか話しません。それはActiveRecordだけではありません。いくつかのヘルパーは、異なる入力をたくさん取るメソッドの良い例です。 –

+0

合意。私は実際にはもう少し詳しくdocを見て、おそらくそれを編集するつもりです。 SQL式を使用できることを示す*最終的な簡単な例がありますが、少し微妙です。私は多分docは "column_nameまたはSQL式"とかそのようなものを言う必要があると思います。私はその文書のどこかでその変更を行うことを覚えようとします。 – denishaskin

関連する問題