おいちゃんと呼ばれています

ウェブ技術や日々考えたことなどを綴っていきます

例えば Rails 4 で Product モデルの price 属性の合計値を出す(inject, sum)

たぶん基本的なことなんだろうけど、自分は知りませんでしたシリーズ。

前提

タイトルのまんまなんですけど、Rails 4 で、Product というモデルがありまして、その price という属性の合計値を出したいなーという前提で。

Before

最初はまあ、下記のようなコードを書きますよね。ね、書きますよね。

sum = 0
products.each do |product|
  sum += product.price
end

After - Enumerable.inject

inject 使おうよ、という指摘を受けて、Enumerable#inject の存在を知る。

products.inject(0) { |sum, product|
  sum + product.price
}

After x 2 - ActiveRecord::Calculations#sum

で、最近、となりのチームのソースを眺めていたら、ActiveRecord::Calculations#sum というのを使ってました。

products.sum(:price)

べんり〜

おまけ

ちなみに Enumerable#inject は合計値を出すだけじゃなくて、他の場面にも応用できるし、Enumerable#sum というのもあったりするのですが、ちょっと本筋から逸れるの割愛します。興味がある方は下記を参照してください。

ではでは。