Sortieren einer Liste mit mehreren Bedingungen Ruby on Rails

8

Ich möchte 12 Teams in einer Liste nach 4 verschiedenen Kriterien rangieren.

Ich werde eine db-Tabelle namens Teams haben und jedes Team wird verschiedene Spalten wie matchs_won, matchs_lost, etc ...

haben

Ich möchte sie in der Reihenfolge basierend auf matches_won anzeigen. Das ist einfach. Wenn jedoch zwei Teams in matchs.won gebunden sind, muss ich prüfen, ob sie gegeneinander gespielt haben und wer gewonnen hat. Wenn sie die gleichen Übereinstimmungen haben und sich nicht gegenseitig gespielt haben, werden ihre Datensätze nach zwei anderen Kriterien verglichen und danach geordnet. Ich denke, wenn ich herausfinden kann, wie ich eine zusätzliche Bedingung an die Art mache, dass ich in der Lage sein werde, herauszufinden, wie man die anderen macht. Aus Gründen der Kürze werde ich sie hier nicht näher beschreiben.

Ich weiß nicht, wie man diese mehrstufige Sortierung in Rails durchführt.

Ich habe mir gedacht, dass ich vielleicht eine "rank" -Spalte in der db-Tabelle und die Funktion "before_save" hinzufüge, die sie in die db einsortiert und sie dann einfach in der Ansicht basierend auf diesem Rang auflistet. Aber das lässt mich mit dem gleichen Problem (nicht wissen, wie man bedingte Sortierung tun) es tut es einfach vor dem Speichern, anstatt, wenn ich es aus der Datenbank lese.

Jede Hilfe wäre willkommen!

    
A.J. Bohac 10.01.2012, 01:25
quelle

1 Antwort

15

Verwenden Sie sort_by und geben Sie ein Array mit Werten an. Es wird sie in der Reihenfolge von links nach rechts vergleichen. Die Standardsortierung ist aufsteigend. Wenn Sie also das Gegenteil wollen (z. B. matches_won sollte absteigend sortiert werden, so dass die meisten Übereinstimmungen zuerst vorkommen, im Gegensatz zu mustoms_lost, die die niedrigste bis höchste Sortierung aufweisen), müssen Sie den Wert negieren.

Hier ist ein Beispiel

%Vor%     
Joshua Cheek 10.01.2012, 01:53
quelle

Tags und Links