So zeigen Sie Alben mit der höchsten Bewertung über eine Beziehung mit has_many Rezensionen an

Ich richte eine einfache Ruby / Rails-App ein, in der Benutzer Alben überprüfen können. Auf der Ausstellungsseite eines Albums mittle ich alle mit diesem Album verknüpften Nutzerkritiken über diesen Code in meinem Album-Controller

def show
  @album = Album.find_by_id(params[:id])
  if @album.reviews.present?
    @ratings = Review.where(album_id: @album).average(:rating).truncate(2)
  else
    render 'show'
  end
end

Dies gibt mir eine durchschnittliche Bewertung für jedes Album. Auf meiner Homepage (die über einen anderen Controller geleitet wird) möchte ich die Top-7-Alben mit der höchsten Durchschnittsbewertung anzeigen.

Ursprünglich habe ich diesen Code in den separaten Homepage-Controller eingefügt:

@albums = Album.all
@ratings = @albums.each {|album| album.reviews.average(:rating).to_f}
@ranked_ratings =  @ratings.sort_by {|rating| rating}
@top_seven = @ranked_ratings.reverse[0...7]

Ich dachte, ich hätte die Lösung gefunden, bis mir klar wurde, dass ich nur die letzten 7 Alben in der Datenbank zeige.

Zurück zum Zeichenbrett Ich konnte mit diesem Code in meinem Controller ein Array aller Alben abrufen (jedes Element innerhalb des Arrays ist eine Liste von Rezensionen, die mit diesem Album verknüpft sind):

@albums = Album.all
@ratings = @albums.collect {|album| album.reviews}

An diesem Punkt stecke ich fest und versuche herauszufinden, wie Sie durch @ratings blättern und die durchschnittliche Bewertung für jede album_id finden, dann diese Datensätze nach der höchsten durchschnittlichen Bewertung ordnen und sie in einer Ansicht anzeigen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage