1

各価格を見つけて現在の価格に追加するメソッドを作成しようとしています。

引用.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
4

5 に答える 5

2
items.inject(0){|sum, item| sum += item.price}
于 2013-10-19T03:55:02.487 に答える
1

最近の Ruby に関する優れた機能を次に示します。

values = [1,2,3,4,5]
values.inject(:+) # => 15

とはいえ、データベースを扱っているのでsum、レコードを用意してください。ドキュメントから:

指定された列の値の合計を計算します。値は列と同じデータ型で返され、行がない場合は 0 が返されます。オプションの例については、calculate を参照してください。

Person.sum('age') # => 4562
于 2013-10-19T03:40:55.053 に答える
1

この場合、計算をデータベースにオフロードできます。

def total_price
  items.sum('price')
end

参考:http ://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-sum

于 2013-10-19T03:41:09.687 に答える
0

.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}
于 2013-10-19T03:30:00.543 に答える
0

どうですか

items.map(&:price).inject(0, :+)

map 部分は items 配列を価格の配列にマップし、inject 部分は 0 から始まり、価格配列の各要素を追加します。

StackOverflow の質問のマッピング

ドキュメントを挿入する

例を挿入する

于 2013-10-19T03:39:38.153 に答える