2016-11-17 9 views
1

I m triying, чтобы сделать в среднем несколько параметров. Для 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 

Кстати, этот метод не DRY наверняка ....

+0

Лично еще не пробовал. 'Comment.where (: camping_id => params [: id]). Group (: service, ...)' Посмотрите, что возвращает, затем получите sum/avg и т. Д. ... дайте мне знать! – 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 теперь Hash с, например, {: Сервис => 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

Еще один вопрос, если я хочу отображать среднее значение для «службы» или других параметров отдельно, как это возможно на мой взгляд? – nicolaswecandoit

+0

См. Обновленный ответ. –