Rails4: ActiveRecord カラム演算してその合計を出す—例えば数量×単価の合計


テーブルのカラムをかけ算してその合計を出す。例えば検索されたデータ行の数量×単価の合計を出したい。

結論を言えば下記。
Eitem というモデルに数量(quantity)と単価(price)がある。これらは同じestimate_idという見積書データのidを持っているものとする。

    eitems = Eitem.where(:estimate_id => estimate_id).select("sum(eitems.quantity * eitems.price) as total, eitems.estimate_id").group(:estimate_id).order(nil)
    total = eitems.first.total

余談だが、order(nil)しておかないと eitems.id で order by してしまってエラーになる。

ActiveRecordネイティブぽい記述(sum()とか)でできると思ってググったり、modelにメソッドを追加したり、半日試行錯誤したが、結局 selectを使う方法しか考えられなかった。

もっとActiveRecordっぽいいい方法があるのだろうか。

参考:Rails 3.1 – find using count and select as

広告