2016-11-17 87 views
1

我正在測量多個參數的平均值。對於1個獨特的參數,所有作品都完美無缺,但我無法平均做多個參數。你可以幫我嗎 ?多個參數的全球平均值

@ratingservice = Comment.where(:camping_id => params[:id]).average(:service).to_i 
     @ratingcommunication = Comment.where(:camping_id => params[:id]).average(:communication).to_i 
     @ratingqualiteprix = Comment.where(:camping_id => params[:id]).average(:qualiteprix).to_i 
     @ratinganimation = Comment.where(:camping_id => params[:id]).average(:animation).to_i 
     @ratingproprete = Comment.where(:camping_id => params[:id]).average(:proprete).to_i 
     @ratingsituation = Comment.where(:camping_id => params[:id]).average(:situation).to_i 

對於多PARAMS該命令不工作:未初始化不斷

@ratingall = Commment.where(:camping_id => params[:id]).average(:service, :communication, :qualiteprix, :animation, :proprete, :situation).to_i 

通過這種方法是不燥肯定的方式....

+0

個人而言,尚未嘗試過。 'Comment.where(:camping_id => params [:id])。group(:service,...)'看看返回的東西然後得到總和/平均等...讓我知道! – 7urkm3n

回答

2

average只接受一個列名。

如果要直接計算平均值的平均值,您可能必須編寫SQL查詢。

爲您的代碼的版本烘乾機:

where_camping = Comment.where(:camping_id => params[:id]) 
@ratings = [:service, :communication, :qualiteprix, :animation, :proprete, :situation].map{|key| 
    [key, where_camping.average(key).to_i] 
}.to_h 

@ratings現在是例如哈希{:服務=> 3:通信=> 2,...}

爲了得到平均的平均:

@ratingall = @ratings.values.sum.to_f/ratings.size 

要在視圖中獲取特定的評價:

@ratings[:service] 

要重複評級:

@ratings.each do |category,rating| 
    # Use category and rating variables. 
end 
+0

作品!謝謝 !!! – nicolaswecandoit

+0

還有一個問題,如果我想顯示「服務」或其他參數的平均值單獨如何在我的視圖中可以這樣的ID? – nicolaswecandoit

+0

查看更新的答案。 –