各価格を見つけて現在の価格に追加するメソッドを作成しようとしています。
引用.rb:
class Quote < ActiveRecord::Base
has_many :items
def calc_price
sum = 0
items.each do |item|
item.price
end
sum = (item1 + item2 etc)
end
end
各価格を見つけて現在の価格に追加するメソッドを作成しようとしています。
引用.rb:
class Quote < ActiveRecord::Base
has_many :items
def calc_price
sum = 0
items.each do |item|
item.price
end
sum = (item1 + item2 etc)
end
end
items.inject(0){|sum, item| sum += item.price}
最近の Ruby に関する優れた機能を次に示します。
values = [1,2,3,4,5]
values.inject(:+) # => 15
とはいえ、データベースを扱っているのでsum
、レコードを用意してください。ドキュメントから:
指定された列の値の合計を計算します。値は列と同じデータ型で返され、行がない場合は 0 が返されます。オプションの例については、calculate を参照してください。
Person.sum('age') # => 4562
この場合、計算をデータベースにオフロードできます。
def total_price
items.sum('price')
end
参考:http ://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-sum
.each
ループ内で価格を合計する必要があります
class Quote < ActiveRecord::Base
has_many :items
def calc_price
sum = 0
items.each do |item|
sum += item.price
end
end
end
を使用して、そのループを1行にさらに圧縮できます
items.each {|item| sum += item.price}
どうですか
items.map(&:price).inject(0, :+)
map 部分は items 配列を価格の配列にマップし、inject 部分は 0 から始まり、価格配列の各要素を追加します。