0

Modell:Rails Active Kombination Ergebnis mehrerer Abfragen

player 
    belongs_to :current_club 
    belongs_to :parent_club 
    has_many :ratings 

rating 
    belongs_to :player 

Grund Schema:

create_table "clubs", force: :cascade do |t| 
    t.integer "league_id" 
    t.string "club_name" 
end 

create_table "players", force: :cascade do |t| 
    t.integer "player_id" 
    t.string "player_name" 
    t.integer "current_club_id" 
    t.integer "parent_club_id" 
end 

create_table "ratings", force: :cascade do |t| 
    t.integer "player_id" 
    t.integer "rating" 
    t.date "date" 
end 

Ich mag die neueste Bewertung für jeden Spieler bekommen, die nicht an einem bestimmten current_club funktioniert und Listen Sie die Spieler in absteigender Reihenfolge der aktuellen Bewertung auf.

Für die aktuelle Bewertung von Informationen aller Spieler bekommen und die Auflistung in absteigender Reihenfolge, die folgenden Werke:

@ratings = Rating.select([:player_id, :rating, :date, 'MAX(date)']).order('rating desc').group(:player_id) 

Und für die Informationen aller Spieler bekommen, die nicht an einem bestimmten current_club ist, die folgenden Werke:

@players = Player.paginate(page: params[:page], per_page: 50).includes(:current_club).where.not(current_club_id: 101121) 

ich kann einfach nicht herausfinden, wie die beiden so zu kombinieren, dass es Ordnung und die Spieler Informationen für alle Spieler in absteigender Reihenfolge die neueste Bewertung für alle Spieler bekommt die current_club nicht sind 101121. Danke voraus.

Antwort

0

Fix die Reihenfolge, in Beziehung Definition:

player 
    belongs_to :current_club 
    belongs_to :parent_club 
    has_many :ratings, -> { order(rating: :desc) } 

Jetzt können Sie einfach anrufen:

@players = Player.paginate(page: params[:page], per_page: 50).includes(:current_club, :ratings).where.not(current_club_id: 101121) 
+0

, die nicht funktionieren. Spieler haben mehrere Bewertungen, die entweder steigen oder fallen können. Ich möchte die neueste Bewertung erhalten und diese in absteigender Reihenfolge sortieren. Mit dem, was Sie vorgeschlagen haben, wird es mehrere Bewertungen von jedem Spieler statt der neuesten haben. – Damien