2016-11-17 4 views
1

複数のパラメータの平均を行うようにトリミングします。 1つのユニークなパラメータについては、すべて完全に動作しますが、複数のパラメータを平均することはできません。手伝って頂けますか ?複数のparamsのために複数のパラメータのグローバル平均

@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 

このコマンドdoesntの仕事:このメソッドは確かに乾燥していないちなみに初期化されていない一定の

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

....

+0

個人的に、まだ試していません。グループ(:サービス、...) '戻り値を確認してからsum/avgなどを取得してください...私に教えてください! – 7urkm3n

答えて

2

averageは、1つの列名のみを受け入れます。

平均の平均を直接計算する場合は、おそらく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

更新された回答を参照してください。 –