2016-11-17 6 views
1

Ich triying, um einen Durchschnitt von mehreren params zu machen. Für 1 einzigartige params funktioniert alles perfekt, aber ich kann nicht mehrere params durchschnittlich. Kannst du mir helfen ?Globaler Durchschnitt für mehrere Parameter

@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 

Für mehrere params dieser Befehl nicht funktioniert: nicht initialisierte Konstante

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

Durch die Art und Weise dieses Verfahren nicht DRY sicher ist ....

+0

Persönlich noch nicht ausprobiert. 'Kommentar.wobei (: camping_id => params [: id]) .group (: service, ...)' sehen was zurückkommt, dann sum/avg etc ... lass es mich wissen! – 7urkm3n

Antwort

2

average akzeptiert nur einen Spaltennamen.

Sie müssen wahrscheinlich eine SQL-Abfrage schreiben, wenn Sie den Durchschnitt der Durchschnitte direkt berechnen möchten.

für einen Trockner Version des Codes:

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 ist nun ein Hash mit z.B. {: Service => 3: Kommunikation => 2, ...}

Um den Durchschnitt der Mittelwerte zu erhalten:

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

Um eine bestimmte Bewertung Ihrer Ansicht zu erhalten:

@ratings[:service] 

Um über die Bewertungen zu iterieren:

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

Funktioniert! Vielen Dank !!! – nicolaswecandoit

+0

Eine Frage mehr, wenn ich den Durchschnitt für "Service" oder andere Params separat anzeigen möchte, wie kann dies aus meiner Sicht? – nicolaswecandoit

+0

Siehe aktualisierte Antwort. –

Verwandte Themen