Ruby on Rails: Abrufen des Maximalwerts aus einer DB-Spalte

125

Derzeit kann ich die direkte SQL-Abfrage in meiner Datenbank durchführen:

SELECT MAX(bar) FROM table_name

Und es wird mit dem Maximalwert in dieser Tabelle zurückgegeben. Wenn ich in Rails einen meiner Meinung nach gleichwertigen Anruf tätige, funktioniert dies jedoch nicht. Ich rufe an:

Bar.all(:select => "Max(bar)")

Dies kehrt einfach zurück mit:

[#<Bar >]

In der Spalte, die ich anrufe, befindet sich eine Reihe von Identifikationsnummern, ich suche die größte. Gibt es eine andere Möglichkeit, in Rails darauf zuzugreifen?

Schlüsselbohrung
quelle

Antworten:

272

Angenommen, Ihr Modellname lautet Barund er hat eine Spalte mit dem Namen bar, sollte dies funktionieren:

Bar.maximum("bar")

Weitere Informationen finden Sie im Abschnitt " Ausgezeichnete Schienenführungen" unter "Berechnungen" .

Dylan Markow
quelle
Ah ha! Richtig, das hat es geschafft. Ich werde Ihre Antwort abhaken, sobald SO es mir erlaubt. Vielen Dank!
Keybored
6

noch einen Weg

Bar.select("Max(bar) as max_bar").first.max_bar
Manish Kasera
quelle
5
Warum willst du das tun? Ausführlicher und führt genau die gleiche Abfrage aus, Bar.maximum(:bar)sodass ich keinen Grund sehe, diese Antwort überhaupt zu "empfehlen" ...
Nathanvda
19
Zum Beispiel, wenn Sie sowohl Min als auch Max wollen:Bar.select("MAX(bar) max_bar, MIN(bar) min_bat").first.attributes
Shalev Shalit
Die Person, die die Frage stellte, wollte nur max.
Chris Peters
1
Er hat die Frage richtig beantwortet. Wahrscheinlich ist es nicht die beste Antwort, aber er hat nichts falsch gemacht.
david0116