1

特定のレコードセットの平均を計算する方法があります。

input = params[:recommendation_ratings].values  # The params are sent from radio_tags in my view.

input.each do |mini_params|
rating_id = mini_params[:rating_id]
l = Rating.find(rating_id) #Find record on Rating table. 
l.rating #Get value associated with rating_id
total_rating = []
total_rating << l.rating
average = total_rating.inject{ |sum, el| sum + el }.to_f / total_rating.size
puts average
end

l.rating が total_rating 配列に追加されていません。プット平均は次のように出力されます。

3.0
3.0
3.0
3.0
3.0

返される各評価を配列に追加して、平均やその他の数学関数を計算するにはどうすればよいですか。

4

3 に答える 3

6

試す:

total_rating = []    
input.each do |mini_params|
  rating_id = mini_params[:rating_id]
  l = Rating.find(rating_id) #Find record on Rating table. 
  total_rating << l.rating      
end
average = total_rating.sum / total_rating.size.to_f
于 2013-02-08T06:38:52.940 に答える
2

これで問題は解決するはずですが、もっと良い方法があります

total_rating = []    
input.each do |mini_params|
  rating_id = mini_params[:rating_id]
  l = Rating.find(rating_id) #Find record on Rating table. 
  total_rating << l.rating
  average = total_rating.inject(:+).to_f / total_rating.size
  puts average
end

したがって、IDの配列が与えられたら、次のことを試してください

Rating.where(id: mini_params[:rating_id]).average(:rating)

更新:1行バージョンの修正

rating_ids = input.map { |mini_params| mini_params[:rating_id] }
Rating.where(id: rating_ids).average(:rating)
于 2013-02-08T06:31:49.040 に答える
0

まず、平均しようとしているすべての評価を取得する必要があります。あなたはすでにこれを行っていると思います、そしてそれらの評価はすべてに保存されていtotal_ratingます。次に、そのアレイに特定の評価を追加する必要があります。

rating_id = mini_params[:rating_id]
l = Rating.find(rating_id)
total_rating << l
average = total_rating.sum.to_f / total_rating.size
puts average
于 2013-02-08T06:29:03.827 に答える